2015-10-13 35 views
0
while (sentence.indexOf(lookFor) > lookFor) 
{ 
    sentence += sentence.substring(sentence.indexOf(lookFor)); 
} 
String cleaned = sentence; 
return cleaned; 

這是我爲了移除字母而試圖做的。 lookFor是已經存在的字符,而句子是已經放入的原始字符串。目前,我的代碼輸出的句子沒有做任何事情。
EX正確輸出:輸入「abababa」句子; char爲「a」--->輸出「bbb」 輸入「xyxyxy」句子; char「a」--->輸出「xyxyxy」在Java中使用while循環移除字符串中的字母

+3

'sentence.indexOf(lookFor)> lookFor'你比較字符串中的字符本身的字符的位置。這沒有任何意義。 – mkasberg

+0

'句子+ = ...'這樣你永遠不會從'句子'中刪除任何東西。它只會變長。 – mkasberg

+0

要刪除所有「a」嗎? –

回答

-1

如果你只是需要擺脫的信函中使用的替換其他人編寫方法,但如果你想使用while循環,基於我所見到的邏輯,這就是你如何去做的。

while (sentence.indexOf(lookFor) == 0) 
    sentence = sentence.substring(1); 
while (sentence.indexOf(lookFor) > 0) 
{ 
    sentence = sentence.substring(0, sentence.indexOf(lookFor)-1)+ 
       sentence.substring(sentence.indexOf(lookFor)+1); 
} 
return sentence; 
+0

這會爲每個循環迭代創建3個String對象,同時廢棄舊循環。如果將垃圾收集應用於文本,您的垃圾收集將會飛速發展。 – sturcotte06

+0

明顯有更好的方法來完成OP的任務,但是基於我們所看到的他的邏輯,這可能是他想要做的。對不起,但他從來沒有給垃圾回收設置任何限制 – stakSmashr

+0

謝謝!這對我來說很成功,但我不瞭解子串添加在一起的位。 – anlam456

4

對於單個字符串,你不需要while。只有當你在一行之後閱讀文本行時。 在你的情況類似

String a = "abababa"; 
a = a.replace("a",""); 

會給你的輸出「​​BBB」

+0

感謝您的建議,但對於此作業,我必須使用while循環來解決此問題。我也輸入了幾個字符串。對不起,沒有說清楚。 – anlam456

0

它可能根本沒有進入循環。

sentence.indexOf(lookFor)將返回字符串中字符的位置。

lookFor是一個char值。 'a'值的數值爲97,所以while將只在前97個字符後面找到。

如果您的代碼曾進入循環,則永遠不會返回。

您正在調用的substring命令會將找到的項目放在字符串的末尾。

+ =,如果它做了你認爲會將其附加到自身。所以它會採用'ababab'並永遠使其成爲'ababababab'。但幸運的是,你不能在java中的字符串上使用+ =。

你想要的是:

String something = "abababab"; 
something = something.replaceAll("a", ""); 
+0

其實你的答案是來自評論和我的答案的組合;) –

+1

如果你不使用(真正的)正則表達式,避免使用'replaceAll'總是一個好主意。 – Tom

+0

@JürgenK。哈。當我開始輸入時,沒有任何評論或答案。當我完成時,有一噸。發生這樣一個簡單的問題。我投了你的答案。和湯姆,是的,你是對的,但我想通過替換的例子只會產生一個關於替換非char值的問題。 – teacurran