434 votes

Quelle est la manière la plus simple / la meilleure / la plus correcte de parcourir les caractères d'une chaîne en Java?

StringTokenizer ? Convertissez les String en char[] et répétez cela? Autre chose?

448voto

jjnguy Points 62123

J'utilise une boucle for. Et utilisez charAt() . Comme la chaîne est implémentée avec un tableau, la méthode charAt() est une opération à heure constante.

 String s = "...stuff...";

for (int i = 0; i < s.length(); i++){
    char c = s.charAt(i);        
    //Process char
}
 

C'est ce que je ferais. Cela me semble le plus facile.

En ce qui concerne l'exactitude, je ne crois pas que cela existe ici. Tout est basé sur votre style personnel.

258voto

Dave Cheney Points 2195

Deux options

 for(int i = 0, n = s.length() ; i < n ; i++) { 
    char c = s.charAt(i); 
}
 

ou

 for(char c : s.toCharArray()) {
    // process c
}
 

Le premier est probablement plus rapide, alors le second est probablement plus lisible.

99voto

sk. Points 3690

Remarque la plupart des autres techniques décrites ici briser si vous avez à traiter avec des caractères en dehors de la BMP (Unicode Plan Multilingue de Base), c'est à dire les points de code qui sont à l'extérieur de la u0000-uFFFF gamme. Cela ne se produit que rarement, étant donné que le code des points à l'extérieur ce sont pour la plupart affectés à des langues mortes. Mais il y a certains caractères en dehors de cela, par exemple, certains points de code utilisé pour la notation mathématique, et certains ont utilisé pour encoder les noms propres Chinois.

Dans ce cas, votre code sera:

String str = "....";
int offset = 0, strLen = str.length();
while (offset < strLen) {
  int curChar = str.codePointAt(offset);
  offset += Character.charCount(curChar);
  // do something with curChar
}

L' Character.charCount(int) méthode nécessite Java 5+.

Source: http://mindprod.com/jgloss/codepoint.html

21voto

Bruno De Fraine Points 11478

Il y a quelques classes dédiées à cela:

 import java.text.*;

final CharacterIterator it = new StringCharacterIterator(s);
for(char c = it.first(); c != CharacterIterator.DONE; c = it.next()) {
   // process c
   ...
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X