如何将for-each循环应用于String中的每个字符?

所以我想迭代string中的每个字符。

所以我认为:

for (char c : "xyz") 

但是我得到一个编译器错误:

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

我怎样才能做到这一点?

对于String每个char的最简单的方法是使用toCharArray()

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

这给了你每个构造的简洁,但不幸的是String (它是不可变的)必须执行一个防御拷贝来生成char[] (这是可变的),所以有一些成本的惩罚。

从文档 :

[ toCharArray()返回一个新分配的字符数组,其长度是该string的长度,其内容被初始化为包含该string表示的字符序列。

有更详细的方法来迭代数组中的字符(循环toCharArray()CharacterIterator等),但是如果您愿意花费toCharArray()的成本 – 每个都是最简洁的。

 String s = "xyz"; for(int i = 0; i < s.length(); i++) { char c = s.charAt(i); } 

您需要使用String类的toCharArray ()方法将String对象转换为一个char数组:

 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); } 

如果使用Java 8,则可以使用String上的chars()来获取字符Stream ,但是需要将intchar因为chars()返回IntStream

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

如果您将Java 8与Eclipse Collections一起使用,则可以使用带有lambda或方法引用的CharAdapterforEach方法遍历String所有字符。

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

这个特定的例子也可以使用方法引用。

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

注意:我是Eclipse集合的提交者。

另一个有用的解决scheme,你可以使用这个string作为数组

 for (String s : "xyz".split("")) { System.out.println(s); } 

对于Travers一个string,你也可以在string中使用charAt()

喜欢 :

 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()是在java中的string处理方法,它有助于遍历string的特定字符。