Java 在字符串上迭代

Java 在字符串上迭代,java,string,indexing,Java,String,Indexing,我必须迭代字符串的元素,并在每次迭代中执行一些检查 我的问题是: 最好使用什么:String或StringBuilder String.charAt(i)或StringBuilder.charAt(i)的运行时间是否有差异? 我不必修改字符串,只需迭代所有元素。使用StringBuilder的唯一原因是为了修改(因为字符串是不可变的)。在这种情况下,您应该可以对字符串本身进行迭代。StringBuilder在您修改字符串时非常有用,而在您不修改字符串时非常有用 对于您的案例String 关于性能

我必须迭代字符串的元素,并在每次迭代中执行一些检查

我的问题是:

最好使用什么:
String
StringBuilder

String.charAt(i)
StringBuilder.charAt(i)的运行时间是否有差异?


我不必修改字符串,只需迭代所有元素。

使用StringBuilder的唯一原因是为了修改(因为字符串是不可变的)。在这种情况下,您应该可以对字符串本身进行迭代。

StringBuilder
在您修改字符串时非常有用,而在您不修改字符串时非常有用

对于您的案例
String

关于性能:这两个方面都是
恒定时间
,或者可以忽略不计

注意:

当您在定义为字符串时修改字符串时,它会创建新字符串,而不是实际修改它,这就是为什么最好使用
StringBuilder

e、 (g)

这里还创建了一个新的世界字符串,以及已在字符串池中创建的hello


另外:

正如其他人所说,两者之间没有性能差异。你可以通过查看来源来说服自己。正如你在下面看到的,这两者几乎完全相同

公共字符更多…字符(int索引){
如果((索引<0)| |(索引>=计数)){
抛出新StringIndexOutOfBoundsException(索引);
}
返回值[索引+偏移];
}

公共字符(int索引){
如果((索引<0)| |(索引>=计数))
抛出新StringIndexOutOfBoundsException(索引);
返回值[索引];
}
换句话说,使用你已经拥有的一切。如果有字符串,请使用字符串;如果有StringBuilder,请使用StringBuilder。从一个对象转换到另一个对象的成本将大大超过这两种方法之间的任何性能差异。

  • String
    StringBuilder
    都是Java中的类
  • String
    用于创建字符串常量
  • StringBuilder
    name本身指示生成字符串。这意味着我们可以轻松完成
    使用此类进行修改
在您的情况下,只需使用String类即可。

字符串在Java中是不可变的。这意味着在每次修改后,将使用最新修改的值创建一个新的
字符串

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");
   }
}
String str=新字符串(“AVINASH”);
字符检查='s';
int length=str.length();
对于(int i=0;i
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 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");
   }
}