Java 如何遍历字符串

Java 如何遍历字符串,java,string,loops,Java,String,Loops,如何在Java中迭代字符串 我正在尝试对循环使用foreach样式 for (char x : examplestring) { //action } JavaStrings不是字符Iterable。您需要: for (int i = 0; i < examplestring.length(); i++) { char c = examplestring.charAt(i); ... } for(int i=0;i

如何在Java中迭代字符串

我正在尝试对循环使用foreach样式

for (char x : examplestring) {
    //action
}

Java
String
s不是字符
Iterable
。您需要:

for (int i = 0; i < examplestring.length(); i++) {
  char c = examplestring.charAt(i);
  ...
}
for(int i=0;i

我知道很尴尬。

如果您想使用增强循环,可以将字符串转换为charArray

for(char-ch:exampleString.toCharArray()){
系统输出println(ch);
}
使用(r07)可以执行以下操作:

for(char c : Lists.charactersOf(someString)) { ... }
这样可以在不将字符串复制到新数组的情况下方便地使用foreach
列表。charactersOf
列表的形式返回字符串视图

for (int i = 0; i < str.length(); i++) { 
    System.out.println(str.substring(i, i + 1)); 
} 
for(inti=0;i
这比我的版本糟糕得多,因为它将
字符串
复制到函数返回的临时数组中。@cletus-您无法访问原始数组-字符串是不可变的,因此应该是源数组。但在Java中,您总是可以修改数组,这将导致破坏Java优化(internig)。无论如何,一份拷贝比许多
length()
charAt()
@gertas拷贝都要快,这正是我所说的。因为数组是可变的,所以必须防御性地复制它。那么你有那份拷贝的费用是为了什么?语法糖。这就是为什么这是个坏主意。@cletus:但在这里它不是语法糖。一般来说,我们有相当多的内存与cpu的问题。我不介意JVM是否以某种方式优化了对字符串方法的访问,但仍然需要为每个字符调用
.lenght()
.charAt()
。@gertas:您需要更多地赞扬Java的优化编译器。在我的机器上(jre7-32bit-single),通过索引进行迭代比通过
char[]
copy.+1进行迭代快2%。我不知道r07出局了。不过,有趣的是,这是可用选项中最慢的。与同等的
charAt
测试相比,完成测试所花费的时间要长49%。@Gunslinger 47:我想,为完成测试而对每个字符进行装箱和拆箱的需要会使测试速度减慢一点。该方法可能更倾向于调整字符串以用于各种基于
集合的API,而不仅仅是用于这样的迭代。