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 ?
En Java 8 on peut le résoudre comme suit :
String str = "xyz";
str.chars().forEachOrdered(i -> System.out.print((char)i));
La méthode chars() renvoie un IntStream
comme mentionné dans doc :
Renvoie un flux d'int qui prolonge de zéro les valeurs char de cette séquence. Tout caractère qui correspond à un point de code de substitution est passé passe sans être interprété. Si la séquence est modifiée pendant que le flux est le flux est lu, le résultat est indéfini.
forEachOrdered
et non forEach
?Le comportement de forEach
est explicitement non déterministe, alors que la fonction forEachOrdered
exécute une action pour chaque élément de ce flux, dans l'ordre suivant ordre de rencontre du flux si le flux a un ordre de rencontre défini. Ainsi, forEach
ne garantit pas que l'ordre sera respecté. Vérifiez également ceci question pour plus.
Nous pourrions également utiliser codePoints()
pour imprimer, voir ceci responder pour plus de détails.
Malheureusement, Java ne fait pas String
mettre en œuvre Iterable<Character>
. Cela pourrait facilement être fait. Il y a StringCharacterIterator
mais cela n'implémente même pas Iterator
... Alors fais le tien :
public class CharSequenceCharacterIterable implements Iterable<Character> {
private CharSequence cs;
public CharSequenceCharacterIterable(CharSequence cs) {
this.cs = cs;
}
@Override
public Iterator<Character> iterator() {
return new Iterator<Character>() {
private int index = 0;
@Override
public boolean hasNext() {
return index < cs.length();
}
@Override
public Character next() {
return cs.charAt(index++);
}
};
}
}
Maintenant, vous pouvez (assez) facilement exécuter for (char c : new CharSequenceCharacterIterable("xyz"))
...
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 traitement des chaînes de caractères en java qui permet de parcourir la chaîne de caractères à la recherche d'un caractère spécifique.
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.