在Java中迭代字符串字符的方法有:
使用StringTokenizer ? 将String转换为char[]并对其进行迭代。
最简单/最好/最正确的迭代方法是什么?
在Java中迭代字符串字符的方法有:
使用StringTokenizer ? 将String转换为char[]并对其进行迭代。
最简单/最好/最正确的迭代方法是什么?
当前回答
我使用一个for循环来迭代字符串,并使用charAt()来获取每个字符以检查它。由于String是用数组实现的,charAt()方法是一个常量时间操作。
String s = "...stuff...";
for (int i = 0; i < s.length(); i++){
char c = s.charAt(i);
//Process char
}
这就是我要做的。对我来说这似乎是最简单的。
至于正确性,我不相信这里存在。这完全取决于你的个人风格。
其他回答
如果您的类路径中有Guava,下面是一个相当可读的替代方案。对于这种情况,Guava甚至有一个相当合理的自定义List实现,所以这不应该是低效的。
for(char c : Lists.charactersOf(yourString)) {
// Do whatever you want
}
更新:正如@Alex指出的那样,在Java 8中也有CharSequence#字符可以使用。甚至它的类型是IntStream,所以它可以映射到像这样的字符:
yourString.chars()
.mapToObj(c -> Character.valueOf((char) c))
.forEach(c -> System.out.println(c)); // Or whatever you want
所以通常有两种方法在java中迭代字符串,这已经被很多人在这个线程中回答了,只是添加了我的版本 首先是使用
String s = sc.next() // assuming scanner class is defined above
for(int i=0; i<s.length(); i++){
s.charAt(i) // This being the first way and is a constant time operation will hardly add any overhead
}
char[] str = new char[10];
str = s.toCharArray() // this is another way of doing so and it takes O(n) amount of time for copying contents from your string class to the character array
如果性能受到威胁,那么我会建议在常数时间内使用第一个,如果不是,那么考虑到java中字符串类的不可变性,那么使用第二个会使您的工作更容易。
我不会使用StringTokenizer,因为它是JDK遗留的类之一。
javadoc说:
StringTokenizer是一个遗留类 出于兼容性原因而保留 尽管在new中不鼓励使用 代码。建议任何人 查找此功能,请使用 的split方法 regex包代替。
我使用一个for循环来迭代字符串,并使用charAt()来获取每个字符以检查它。由于String是用数组实现的,charAt()方法是一个常量时间操作。
String s = "...stuff...";
for (int i = 0; i < s.length(); i++){
char c = s.charAt(i);
//Process char
}
这就是我要做的。对我来说这似乎是最简单的。
至于正确性,我不相信这里存在。这完全取决于你的个人风格。
如果你需要遍历字符串的代码点(见这个答案),一个更短/更可读的方法是使用Java 8中添加的CharSequence#codePoints方法:
for(int c : string.codePoints().toArray()){
...
}
或者直接使用流而不是for循环:
string.codePoints().forEach(c -> ...);
如果你想要字符流,还有CharSequence#chars(尽管它是IntStream,因为没有CharStream)。