我想对字符串中的每个字符进行迭代。
所以我想:
for (char c : "xyz")
但我得到一个编译器错误:
MyClass.java:20: foreach not applicable to expression type
我该怎么做呢?
我想对字符串中的每个字符进行迭代。
所以我想:
for (char c : "xyz")
但我得到一个编译器错误:
MyClass.java:20: foreach not applicable to expression type
我该怎么做呢?
当前回答
不幸的是,Java没有使String实现Iterable<字符>。这很容易做到。有StringCharacterIterator,但它甚至没有实现Iterator…所以自己做吧:
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++);
}
};
}
}
现在你可以(有点)轻松地运行for (char c: new CharSequenceCharacterIterable("xyz"))…
其他回答
另一个有用的解决方案,您可以将此字符串作为string数组使用
for (String s : "xyz".split("")) {
System.out.println(s);
}
如果你使用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的提交者。
你需要使用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);
}
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中字符串处理的方法,它帮助遍历特定字符的字符串。