Il n'y a vraiment pas une bonne réponse. Un itérateur en Java s'applique spécifiquement à une collection d'éléments discrets (des objets). On pourrait penser qu'un String
, qui implémente CharSequence
, devrait être une "collection" de caractères discrets. Au lieu de cela, il est traité comme une entité unique qui se compose de caractères.
En Java, il semble que les itérateurs ne sont réellement appliquées pour les collections, et pas à une chaîne. Il n'ya aucune raison pourquoi il est de cette façon (près que je peux dire - vous aurait probablement parler Gosling ou de l'API écrivains); il semble convention ou d'une décision de conception. En effet, il n'y a rien de prévenir CharSequence
à partir de la mise en œuvre de Iterable
.
Cela dit, vous pouvez effectuer une itération sur les caractères dans une chaîne de caractères comme suit:
for (int i = 0; i < str.length(); i++) {
System.out.println(str.charAt(i));
}
Ou comme d'autres l'ont dit:
for(char c : str.toCharArray()) {
System.out.println(c);
}
Notez également que vous ne pouvez pas modifier un caractère d'une Chaîne en place, car les Chaînes sont immuables. La mutable compagnon de Chaîne est StringBuilder (plus âgés ou StringBuffer).
MODIFIER
À préciser sur la base des commentaires sur cette réponse. J'essaie d'expliquer, une justification possible pour expliquer pourquoi il n'est pas un Itérateur sur un String
. Je ne suis pas en train de dire qu'il n'est pas possible; en effet, je pense qu'il serait judicieux CharSequence
à mettre en oeuvre Iterable
.
String
fournit CharSequence
, qui, si seulement sur le plan conceptuel, est différent d'un String
. Un String
est généralement considéré comme une seule entité, alors qu' CharSequence
, c'est exactement cela: une séquence de caractères. Il serait judicieux d'avoir un itérateur sur une séquence de caractères (c'est à dire, sur CharSequence
), mais pas simplement sur un String
lui-même.
Comme Foxfire a à juste titre relevé dans les commentaires, String
implémente l' CharSequence
interface, type sage, un String
est CharSequence
. Du point de vue sémantique, il me semble que ce sont deux choses séparées - je suis probablement d'être pointilleux, mais quand je pense à un String
j'ai l'habitude de le penser comme une entité unique qui se compose de caractères. Considérez la différence entre la séquence de chiffres 1, 2, 3, 4
et le nombre 1234
. Considérons maintenant la différence entre la corde abcd
, et la séquence de caractères a, b, c, d
. Je suis en train de pointer du doigt cette différence.
À mon avis, se demandant pourquoi l' String
n'ont pas un itérateur, c'est comme demander pourquoi Integer
n'ont pas un itérateur de sorte que vous pouvez effectuer une itération sur les chiffres individuels.