String s = "xyz";
for(int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
}
You need to convert the String object into an array of char using the toCharArray
() method of the String class:
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);
}
For Travers an String you can also use charAt()
with the string.
like :
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()
is method of string handling in java which help to Travers the string for specific character.
In Java 8 we can solve it as:
String str = "xyz";
str.chars().forEachOrdered(i -> System.out.print((char)i));
The method chars() returns an IntStream
as mentioned in doc:
Returns a stream of int zero-extending the char values from this sequence. Any char which maps to a surrogate code point is passed through uninterpreted. If the sequence is mutated while the stream is being read, the result is undefined.
forEachOrdered
and not forEach
?The behaviour of forEach
is explicitly nondeterministic where as the forEachOrdered
performs an action for each element of this stream, in the encounter order of the stream if the stream has a defined encounter order. So forEach
does not guarantee that the order would be kept. Also check this question for more.
We could also use codePoints()
to print, see this answer for more details.
You can also use a lambda in this case.
String s = "xyz";
IntStream.range(0, s.length()).forEach(i -> {
char c = s.charAt(i);
});
Another useful solution, you can work with this string as array of String
for (String s : "xyz".split("")) {
System.out.println(s);
}
If you use Java 8, you can use chars()
on a String
to get a Stream
of characters, but you will need to cast the int
back to a char
as chars()
returns an IntStream
.
"xyz".chars().forEach(i -> System.out.print((char)i));
If you use Java 8 with Eclipse Collections, you can use the CharAdapter
class forEach
method with a lambda or method reference to iterate over all of the characters in a String
.
Strings.asChars("xyz").forEach(c -> System.out.print(c));
This particular example could also use a method reference.
Strings.asChars("xyz").forEach(System.out::print)
Note: I am a committer for Eclipse Collections.
Unfortunately Java does not make String
implement Iterable<Character>
. This could easily be done. There is StringCharacterIterator
but that doesn't even implement Iterator
... So make your own:
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++);
}
};
}
}
Now you can (somewhat) easily run for (char c : new CharSequenceCharacterIterable("xyz"))
...
Source: Stackoverflow.com