Java 在迭代时修改stringbuilder

Java 在迭代时修改stringbuilder,java,string,stringbuilder,Java,String,Stringbuilder,在Java中,我可以迭代StringBuilder的内容并删除/插入/替换字符,以便循环保持一致吗?如果是这样,最佳实践是,我应该使用循环、迭代器还是传统的从零到长度的循环()-1?例如: StringBuilder b=new StringBuilder("12345"); for (int i=0; i< b.length(); i++) //traditional loop, iterator(which?),other? char c= b.chartAt(i); if(c

在Java中,我可以迭代StringBuilder的内容并删除/插入/替换字符,以便循环保持一致吗?如果是这样,最佳实践是,我应该使用循环、迭代器还是传统的从零到长度的循环()-1?例如:

StringBuilder b=new StringBuilder("12345");
for (int i=0; i< b.length(); i++) //traditional loop, iterator(which?),other?
  char c= b.chartAt(i);
  if(c == '1') b.deleteCharAt(i); // reduce the size,what is i pointing to now?
  if(c=='2') b.insert(i,"two"); //increase the size
StringBuilder b=新的StringBuilder(“12345”);
for(inti=0;i
}


编辑:假设我有一个大字符串,我需要对它进行更改,我不想每次都复制。StringBuilder是一个可变字符串,如何正确地使用它进行就地更改?我知道我可以在字符串本身上使用replace/replaceall,但这不是重点

如果您想在
StringBuilder
上迭代,那么您可能做了一些错误的事情,因为它只是为不同的目的而设计的(例如,您从名称中注意到的动态字符串化建筑)。如果您想通过更改某些字符序列来获得新的字符序列,请在没有特定要求的情况下使用
String

您可以这样做,但您应该相应地更改
i
的值

StringBuilder b=new StringBuilder("12345");
for (int i=0; i< b.length(); i++) {
      char c= b.chartAt(i);
      if(c == '1'){
          b.deleteCharAt(i);
          i--; // because you don't want to miss out the next char after deleting the present char
      }
      else if(c=='2'){
             b.insert(i,"two"); // I am not sure you want 2 or i
             i=i+2; // change this accordingly.
           }
}
StringBuilder b=新的StringBuilder(“12345”);
对于(int i=0;i
我想你能做到。我同意Statefi的观点,您应该从头到尾迭代:

StringBuilder b=new StringBuilder("12345");
        for (int i = b.length() - 1; i >=0 ; i--){ //traditional loop, iterator(which?),other?
            char c = b.charAt(i);
            if(c == '1') b.deleteCharAt(i); // reduce the size,what is i pointing to now?
            if(c=='2') b.insert(2,"two"); //increase the size
        }

如果要删除任何内容,最好从字符串的结尾到开头进行迭代。为什么要使用
b.insert(2,“2”)
?它应该是
i
2
?谢谢,修复了!当然是我!关键是,假设我有一个大字符串,我知道我必须做很多更改。我不想一直创建副本,但是使用StringBuilder作为可变字符串,这就是这个类的全部内容。如果您想要可变性,为什么不使用StringBuffer呢?为什么必须使用StringBuilder?我的意思是,这可能会让其他开发者感到困惑……对不起,我不明白。据我所知,StringBuffer和StringBuilder本质上是一样的,只是关心线程安全