Comment appliquer la boucle for-each à chaque caractère d'une chaîne?

donc je veux itérer pour chaque caractère d'une chaîne.

donc j'ai pensé:

for (char c : "xyz")

mais j'obtiens une erreur de compilateur:

MyClass.java:20: foreach not applicable to expression type

Comment faire?

147
demandé sur Lyndon White 2010-03-16 04:53:56

8 réponses

la façon la plus facile de-chaque char dans un String est d'utiliser toCharArray() :

for (char ch: "xyz".toCharArray()) {
}

cela vous donne la concision de pour-chaque construction, mais malheureusement String (qui est immuable) doit effectuer une copie défensive pour générer le char[] (qui est mutable), Il ya donc une certaine pénalité de coût.

De la documentation :

[ toCharArray() retourne] un tableau de caractères nouvellement attribué dont la longueur est la longueur de cette chaîne et dont le contenu est initialisé pour contenir la séquence de caractères représentée par cette chaîne.

il y a des moyens plus verbeux d'itérer sur les caractères dans un tableau (régulier pour boucle, CharacterIterator , etc) mais si vous êtes prêt à payer le coût toCharArray() pour-chacun est le plus concis.

266
répondu polygenelubricants 2010-03-16 01:56:50
String s = "xyz";
for(int i = 0; i < s.length(); i++)
{
   char c = s.charAt(i);
}

35
répondu Matthew Flaschen 2012-02-21 09:34:56

vous devez convertir l'objet String en un tableau de char en utilisant le toCharArray () méthode de la classe String:

String str = "xyz";
char arr[] = str.toCharArray(); // convert the String object to array of char

// iterate over the array using the for-each loop.       
for(char c: arr){
    System.out.println(c);
}
6
répondu codaddict 2010-03-16 01:59:38

une autre solution utile, vous pouvez travailler avec cette chaîne comme tableau de chaîne

for (String s : "xyz".split("")) {
    System.out.println(s);
}
4
répondu kyxap 2017-06-19 18:34:19

Dans Java 8 nous pouvons le résoudre:

String str = "xyz";
str.chars().forEachOrdered(i -> System.out.print((char)i));    

la méthode jars() renvoie un IntStream comme indiqué dans doc :

renvoie un flux de zéro int-en prolongeant les valeurs de char à partir de ce séquence. Tout code qui correspond à un code de substitution est transmis par le biais de mal interprétés. Si la séquence est mutée pendant que le flux est en étant lu, le résultat n'est pas défini.

Pourquoi utiliser forEachOrdered et non forEach ?

le comportement de forEach est explicitement non déterministe lorsque le forEachOrdered effectue une action pour chaque élément de ce flux, dans ordre de rencontre du flux si le flux a un ordre de rencontre défini. Ainsi forEach ne garantit pas que la commande serait maintenue. Aussi, cochez cette question pour en savoir plus.

nous pourrions également utiliser codePoints() pour imprimer, voir cette réponse pour plus de détails.

2
répondu i_am_zero 2017-12-10 06:54:10

si vous utilisez Java 8, Vous pouvez utiliser chars() sur un String pour obtenir un Stream de caractères, mais vous devrez lancer le int de nouveau à un char comme chars() retourne un IntStream .

"xyz".chars().forEach(i -> System.out.print((char)i));

si vous utilisez Java 8 avec Eclipse Collections , vous pouvez utiliser la CharAdapter classe forEach méthode avec une lambda ou référence de méthode pour itérer sur tous les caractères dans un String .

CharAdapter.adapt("xyz").forEach(c -> System.out.print(c));

cet exemple particulier pourrait aussi utiliser une référence de méthode.

CharAdapter.adapt("xyz").forEach(System.out::print)

Remarque: je suis un committer pour Eclipse Collections.

1
répondu Donald Raab 2017-07-03 23:33:59

vous pouvez également utiliser un lambda dans ce cas.

    String s = "xyz";
    IntStream.range(0, s.length()).forEach(i -> {
        char c = s.charAt(i);
    });
0
répondu ander4y748 2017-11-29 04:42:17

pour traverser une chaîne, vous pouvez également utiliser charAt() avec la chaîne.

comme :

String str = "xyz"; // given String
char st = str.charAt(0); // for example we take 0 index element 
System.out.println(st); // print the char at 0 index 

charAt() est une méthode de manipulation de chaîne en java qui aide à traverser la chaîne pour un caractère spécifique.

-6
répondu user1690439 2014-02-23 22:50:51