如何遍历字符串[重复]

Posted

技术标签:

【中文标题】如何遍历字符串[重复]【英文标题】:How to iterate through a String [duplicate] 【发布时间】:2011-04-17 11:32:51 【问题描述】:

如何在 Java 中遍历字符串?

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

for (char x : examplestring) 
    //action

【问题讨论】:

【参考方案1】:

Java Strings 不是字符 Iterable。你需要:

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

我知道很尴尬。

【讨论】:

【参考方案2】:

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

for (char ch : exampleString.toCharArray()) 
  System.out.println(ch);

【讨论】:

这比我的版本差很多,因为它将String复制到函数返回的临时数组中。 @cletus - 您无法访问原始数组 - 字符串是不可变的,因此源数组应该相同。但是在 Java 中,您总是可以修改数组,这会导致破坏 Java 优化(实习)。无论如何,一份比许多length()charAt() 要快。 @gertas 这正是我所说的。因为数组是可变的,所以必须防御性地复制它。所以你有那个副本的成本是为了什么?语法糖。这就是为什么这是一个坏主意。 @cletus:但这里不是语法糖。一般来说,我们有相当内存与 cpu 的问题。我不介意 JVM 是否以某种方式优化了对 String 方法的访问,但您仍然为每个字符调用 .lenght().charAt() @gertas:您需要对 Java 的优化编译器给予更多评价。在我的机器(jre7-32bit-single)上,按索引迭代比通过 char[] 副本迭代快 2%。【参考方案3】:

使用Guava (r07) 你可以这样做:

for(char c : Lists.charactersOf(someString))  ... 

这具有使用 foreach 的便利性,而 将字符串复制到新数组。 Lists.charactersOfList 的形式返回字符串的视图

【讨论】:

+1。我不知道r07已经出来了。不过,有趣的是,这是可用选项中最慢的。完成时间比同等的 charAt 测试多 49%。 @Gunslinger47:我想为此对每个字符进行装箱和拆箱的需要会减慢一点速度。该方法可能更旨在调整字符串以用于各种基于 Collection 的 API,而不仅仅是像这样的迭代。【参考方案4】:

这个怎么样

for (int i = 0; i < str.length(); i++)  
    System.out.println(str.substring(i, i + 1)); 
 

【讨论】:

以上是关于如何遍历字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

遍历嵌套的 JavaScript 对象 [重复]

字符串的遍历

如何计算无重复字符的最长子串

急求!!!!用java 写一个 字符串去重 的程序!

jQuery查询字符串遍历[重复]

遍历 Arraylist<String[]> [重复]