Je veux donc itérer pour chaque caractère d'une chaîne.
Alors j'ai pensé :
for (char c : "xyz")
mais je reçois une erreur de compilation :
MyClass.java:20: foreach not applicable to expression type
Comment puis-je le faire ?
Je veux donc itérer pour chaque caractère d'une chaîne.
Alors j'ai pensé :
for (char c : "xyz")
mais je reçois une erreur de compilation :
MyClass.java:20: foreach not applicable to expression type
Comment puis-je le faire ?
La façon la plus simple de for-each chaque char
dans un String
est d'utiliser toCharArray()
:
for (char ch: "xyz".toCharArray()) {
}
Ceci vous donne la concision de la construction for-each, mais malheureusement String
(qui est immuable) doit effectuer une copie défensive pour générer l'image char[]
(qui est mutable), donc il y a une certaine pénalité de coût.
Desde el documentation :
[
toCharArray()
retours] un tableau de caractères nouvellement alloué 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 existe des moyens plus verbeux d'itérer sur les caractères d'un tableau (boucle for classique), CharacterIterator
etc.) mais si vous êtes prêt à payer le prix toCharArray()
for-each est le plus concis.
Le compilateur reconnaîtra-t-il qu'une copie réelle n'est pas nécessaire et appliquera-t-il les optimisations appropriées ?
Voté bas parce que ce n'est pas ce que le PO a demandé. Bien que cette solution soit valable, ce n'est pas du tout ce qui est demandé.
Vous devez convertir l'objet String en un tableau de caractères en utilisant la fonction toCharArray
() 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);
}
Si vous utilisez Java 8, vous pouvez utiliser chars()
sur un String
pour obtenir un Stream
de caractères, mais vous devrez lancer les int
à un char
comme chars()
renvoie un IntStream
.
"xyz".chars().forEach(i -> System.out.print((char)i));
Si vous utilisez Java 8 avec Collections Eclipse vous pouvez utiliser l'option CharAdapter
classe forEach
avec un lambda ou une référence de méthode pour itérer sur tous les caractères d'un fichier String
.
Strings.asChars("xyz").forEach(c -> System.out.print(c));
Cet exemple particulier pourrait également utiliser une référence de méthode.
Strings.asChars("xyz").forEach(System.out::print)
Note : Je suis un committer pour Eclipse Collections.
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.