2015-04-19 22 views
0

我試圖用StringBuffer#insertchar插入一個單詞的不同位置,但要麼我沒有正確使用它,要麼我誤解了這個函數的實際功能。如何正確使用StringBuffer#insert?

首先,我希望它將字母't'添加到"Java"之內的不同位置。我已經給出了我正在嘗試使用的部分代碼。

例如,第一次運行時應該打印「tJava」,然後再打印「Jtava」等等,直到打印出「Javat」後循環結束。然而,我得到的全部是:

tJava 
ttJava 
tttJava 
ttttJava 

如果我使用它錯誤或有一個替代方法做這個建議將不勝感激。

String addLetter = "t"; 
String Word = "Java"; 

StringBuffer tempWord = new StringBuffer(Word); 

for(int i = 0; i<Word.length(); i++) { 
    tempWord = tempWord.insert(i, addLetter); 
    System.out.println(tempWord); 
} 
+1

,但你一直插入到相同的事情。所以你有「1Java」,「12Java」,「123Java」等等,你需要插入一個新的「Word」副本。 – Teepeemm

回答

1

StringBufferStringBuilder類是可變的。你使用一個單引用,並在其中插入數據,從而得到這個結果。

在循環內移動StringBuffer的聲明和初始化。

//removed (commented) 
//StringBuffer tempWord = new StringBuffer(Word); 
for(int i = 0; i<Word.length(); i++) { 
    //using StringBuilder rather than StringBuffer since you don't need synchronization at all 
    StringBuilder tempWord = new StringBuilder(Word); 
    tempWord = tempWord.insert(i, addLetter); 
    System.out.println(tempWord); 
} 
+0

非常感謝!現在完美的作品:) – NiamhMc

+0

不客氣。 –

2

當你調用上StringBufferinsert插入的值將保持不變。例如:

StringBuffer test = new StringBuffer("test"); 
test.insert(1, "t"); 
test.insert(3, "t"); 
System.out.println(test); 

會打印ttetst

因此,您不需要重新分配tempWord = tempWord.insert(i, "t");如果真的要保留更新的字符串。


現在,如果你想顯示原始字符串只有1在正確的位置,增加的性格,你將不得不在每次迭代重新分配給wordtempWord

String addLetter = "t"; 
String Word = "Java"; 

StringBuffer tempWord = new StringBuffer(Word); 

for(int i = 0; i<Word.length(); i++) { 
    tempWord = new StringBuffer(Word); 
    System.out.println(tempWord.insert(i, addLetter)); 
} 
0

如果你堅持使用StringBuffer,你應該將它重新分配給每個迭代的原始單詞。緩衝區會記住插入。

String addLetter = "t"; 
String word = "Java"; 

for(int i = 0; i<Word.length(); i++) { 
    StringBuffer tempWord = new StringBuffer(word); 
    tempWord.insert(i, addLetter); 
    System.out.println(tempWord); 
} 

否則看到Insert a character in a string at a certain position

0

的StringBuilder是可變的,將更新自己的呼叫接入,因而每次循環的情況下被更新。以該值插入在每次循環迭代原始的字符串,你應該創建一個新的對象設置爲原始字符串

for(int i = 0; i<Word.length(); i++) 
    { 
     StringBuffer tempWord = new StringBuffer(Word); 
     System.out.println(tempWord.insert(i, addLetter)); 
    } 
1

讓我們來看看迭代:

i goes from 0 to "Java".length() = 4 
i = 0 -> insert t in 0 -> Java -> t + Java 
i = 1 -> insert t in 1 -> tJava -> t + t + Java 
i = 2 -> insert t in 2 -> ttJava -> tt + t + Java 
i = 3 -> insert t in 3 -> tttJava -> ttt + t + Java 

你想要的是在Java插入t在每次迭代不同的索引,而不是在上一次迭代的結果。

因此,你不應該使用前一次迭代的結果,而是重新分配你的緩衝:你正確地使用它

for(int i = 0 ; i < word.length() ; i++) { 
    StringBuilder sb = new StringBuilder(word); 
    System.out.println(sb.insert(i, "t")); 
}