2015-08-16 117 views
0

在Java迭代,我可以重複上一個StringBuilder的內容和刪除/插入/替換字符使得環路將保持一致?如果是這樣,最好的做法是,我應該使用for循環,迭代器,還是從零到length() - 1的傳統循環?例如,修改一個StringBuilder,而在它

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是一個可變字符串,我如何正確使用它來進行就地更改?我知道我可以在String上使用replace/replaceall,但這不是重點。

+2

如果你想刪除任何東西,最好從字符串的結尾迭代到開始。 – STaefi

+0

爲什麼你有'b.insert(2,「two」)'?它應該是'我'還是'2'? – Karthik

+0

謝謝,修復!這是我當然! – legrass

回答

0

如果你想迭代一個StringBuilder那麼你可能做錯了什麼,因爲它只是爲了不同的目的而設計的(例如你從名字中注意到的動態字符串建築)。如果你想通過改變他們中的一些使用String如果你沒有一些具體的要求得到一個新的字符序列。

+0

的一點是,說我有一個大的字符串,我知道我必須做了很大的改動。我不想一直創建副本,而是使用StringBuilder作爲可變字符串,這就是這個類的全部內容。 – legrass

+0

如果你想要可變性,爲什麼不使用StringBuffer呢?爲什麼StringBuilder的用法是必要的?我的意思是它可能會混淆其他開發人員... – 2015-08-16 08:56:04

+0

對不起,我不明白。的StringBuffer和StringBuilder的本質上是一樣的,只是關心線程安全的,據我所知 – legrass

0

你可以做到這一點,但你應該相應改變的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. 
      } 
} 
1

我想你可以做到這一點。我同意STaefi,你應該從頭到尾迭代:

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 
     }