我想对字符串中的每个字符进行迭代。

所以我想:

for (char c : "xyz")

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

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

我该怎么做呢?


当前回答

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

 

其他回答

在这种情况下你也可以用。

    String s = "xyz";
    IntStream.range(0, s.length()).forEach(i -> {
        char c = s.charAt(i);
    });
String s = "xyz";
for(int i = 0; i < s.length(); i++)
{
   char c = s.charAt(i);
}

 

对于字符串,您也可以使用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中字符串处理的方法,它帮助遍历特定字符的字符串。

在Java 8中,我们可以将其求解为:

String str = "xyz";
str.chars().forEachOrdered(i -> System.out.print((char)i));    

方法chars()返回doc中提到的IntStream:

返回一个int 0的流,从this扩展char值 序列。将传递映射到代理代码点的任何字符 通过粗略的。如果序列发生突变,而流发生突变 被读取时,结果是未定义的。

为什么使用forEachOrdered而不是forEach ?

forEach的行为是显式的不确定的,其中forEachOrdered为流的每个元素执行一个操作,如果流具有定义的遇到顺序,则按照流的遇到顺序执行。因此forEach并不保证顺序会被保持。请检查这个问题以了解更多信息。

我们也可以使用codePoints()来打印,更多细节请参见这个答案。

如果你使用Java 8,你可以在字符串上使用chars()来获得字符流,但是你需要将int类型转换回char类型,因为chars()返回IntStream。

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

如果您使用Java 8和Eclipse Collections,您可以使用CharAdapter类forEach方法和lambda或方法引用来遍历字符串中的所有字符。

Strings.asChars("xyz").forEach(c -> System.out.print(c));

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

Strings.asChars("xyz").forEach(System.out::print)

注意:我是Eclipse Collections的提交者。