我必须迭代字符串的元素,并在每次迭代中执行一些检查。
我的问题是:
最好使用什么:String
或StringBuilder
?
String.charAt(i)
或StringBuilder.charAt(i)?
我 NOT 必须修改字符串,我只需迭代所有元素。
答案 0 :(得分:0)
使用StringBuilder的唯一原因是修改(因为字符串是不可变的)。在这种情况下,你应该没有迭代字符串本身。
答案 1 :(得分:0)
StringBuilder
非常有用,而当您修改字符串时,String
非常有用。
对于您的案例String
关于效果:两者都是constant time
或可忽略[1]
注意:强>
当你定义为字符串时修改字符串时,它会创建新字符串而不是实际修改它,这就是为什么使用StringBuilder
e.g)
string a = "hello";
a = "hai";
此处还会创建一个新的 world 字符串以及已在字符串池中创建的 hello
附加:http://blog.vogella.com/2009/07/19/java-string-performanc/
答案 2 :(得分:0)
正如其他人已经说过的那样,两者之间没有性能差异。您可以通过查看来源来说服自己。正如你在下面看到的那样,两者几乎完全相同。
public char More ...charAt(int index) {
if ((index < 0) || (index >= count)) {
throw new StringIndexOutOfBoundsException(index);
}
return value[index + offset];
}
public char charAt(int index) {
if ((index < 0) || (index >= count))
throw new StringIndexOutOfBoundsException(index);
return value[index];
}
换句话说,使用你已有的任何东西。如果你有一个String,使用String,如果你有一个StringBuilder,请使用StringBuilder。从一个对象转换到另一个对象的成本将远远超过这两种方法之间的性能差异。
答案 3 :(得分:0)
String
和StringBuilder
都是Java中的类。String
用于创建字符串常量。StringBuilder
名称本身表示构建字符串。这意味着我们可以轻松地做到
使用这个类修改。在您的情况下,您只需使用String类。
字符串在Java中是不可变的。这意味着在每次修改后,将使用最新修改的值创建新的String
。
String str = new String("AVINASH");
char check = 's';
int length=str.length();
for(int i=0; i <length ; i++) {
if (check==str.charAt(i)) {
System.out.println("Matched");
}
}