如何将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
,但是需要将int
回char
因为chars()
返回IntStream
。
"xyz".chars().forEach(i -> System.out.print((char)i));
如果您将Java 8与Eclipse Collections一起使用,则可以使用带有lambda或方法引用的CharAdapter
类forEach
方法遍历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的特定字符。