我想要在字符串中迭代每个字符。
所以我考虑:
for (char c : "xyz")
但是我遇到了编译器错误:
MyClass.java:20: foreach not applicable to expression type
我该如何做到这一点?
toCharArray()
是遍历String
中每个char
最简单的方法:for (char ch: "xyz".toCharArray()) {
}
有更冗长的方法来迭代数组中的字符(常规for循环,CharacterIterator等),但如果您愿意支付toCharArray()的成本,则for-each是最简洁的。[toCharArray()返回]一个新分配的字符数组,其长度为此字符串的长度,并且其内容已初始化为包含由该字符串表示的字符序列。
String s = "xyz";
for(int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
}
chars()
来获取字符流,但是您需要将int
强制转换回char
,因为chars()
返回一个IntStream
。"xyz".chars().forEach(i -> System.out.print((char)i));
如果您使用带有Eclipse Collections的Java 8,则可以使用CharAdapter
类forEach
方法和lambda表达式或方法引用迭代String
中的所有字符。Strings.asChars("xyz").forEach(c -> System.out.print(c));
这个特定的例子也可以使用方法引用。
Strings.asChars("xyz").forEach(System.out::print)
注意:我是 Eclipse Collections 的提交者。
另一个有用的解决方案,您可以将该字符串作为字符串数组进行处理。
for (String s : "xyz".split("")) {
System.out.println(s);
}
split()
操作中字符串的任何元素映射到多个Java字符,这将无法工作,这几乎适用于所有表情符号。例如,您示例的这种变体将循环四次而不是三次:for (String s : "xz".split("")) { System.out.println(s); }
。 - skomisatoCharArray
() 方法将 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 str = "xyz";
str.chars().forEachOrdered(i -> System.out.print((char)i));
codePoints()
来打印输出,有关更多详细信息,请参见答案。不幸的是,Java没有让String
实现Iterable<Character>
。这可以很容易地完成。有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 s = "xyz";
IntStream.range(0, s.length()).forEach(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 中字符串处理的一个方法,它可以帮助遍历字符串并查找特定字符。
for (char st: "xyz".toCharArray()) {}
是什么吗? - AmitG
toCharArray( )
被调用了3次? - denvercoder9211900000
时,使用for (char c : str.toCharArray()) { }
完成所需时间约为 250 毫秒,而使用for (char c : charArray) { }
仅需要不到 10 毫秒的时间。当然,这些时间值将受硬件影响,但重要的是其中一种方法比另一种显著更费时。 - denvercoder9toCharArray()
不在循环体内;它只被调用一次,然后循环遍历该结果数组。(增强型 for 循环与通用的for
循环不同,后者会在每次迭代时评估停止条件。) - not-just-yeti