在Java中迭代字符串字符的最简单/最好/最正确的方法是什么?

问题

StringTokenizer?将String转换为achar[]并重复一遍?别的什么?


#1 热门回答(249 赞)

我使用for循环来迭代字符串并使用charAt()来获取每个字符来检查它。由于String是使用数组实现的,因此charAt()方法是一个常量时间操作。

String s = "...stuff...";

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

这就是我要做的。这对我来说似乎最简单。

就正确性而言,我不相信存在于此。这完全取决于你的个人风格。


#2 热门回答(159 赞)

两种选择

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

要么

for(char c : s.toCharArray()) {
    // process c
}

第一个可能更快,然后第二个可能更可读。


#3 热门回答(79 赞)

注意如果你处理的是BMP之外的字符(UnicodeBasic Multilingual Plane),即在u0000-uFFFF范围之外的code points,那么这里描述的大多数其他技术都会被破坏。这种情况很少发生,因为此外的代码点主要分配给死语言。但是在这之外还有一些有用的字符,例如用于数学符号的一些代码点,还有一些用于用中文编码专有名称。

在这种情况下,你的代码将是:

String str = "....";
int offset = 0, strLen = str.length();
while (offset < strLen) {
  int curChar = str.codePointAt(offset);
  offset += Character.charCount(curChar);
  // do something with curChar
}

TheCharacter.charCount(int)方法需要Java 5。

来源:http://mindprod.com/jgloss/codepoint.html