Java 在迭代时修改stringbuilder
在Java中,我可以迭代StringBuilder的内容并删除/插入/替换字符,以便循环保持一致吗?如果是这样,最佳实践是,我应该使用循环、迭代器还是传统的从零到长度的循环()-1?例如: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
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本质上是一样的,只是关心线程安全