2017-05-31 35 views
0

我試圖在每次出現字符串時刪除「再見」一詞。它第一次工作「再見」出現,但隨後開始刪除錯誤的字符。刪除字符串中出現的所有字的Java

String str = "HiByeHiByeByByeHiHiHi"; 
StringBuilder sb = new StringBuilder(str); 
    for(int i=0; i<str.length()-2; i++){ 
     if(str.substring(i,i+3).equals("Bye")){ 
      sb.delete(i,i+3); 
     } 
    } 
    System.out.println(sb.toString()); 
} 
+2

你改變字符串改變因爲它正在被一個列表迭代,所以它的長度和字符位置會隨着你的變化而變化。 –

+1

你最好這樣做''HiByeHiByeByByeHiHiHi「.replaceAll(」Bye「,」「)' – john

+0

OOPS:」你是「! –

回答

1

無需使用StrinBuilder,String#replace能做到這一點,只是使用的方法replace

String str = "HiByeHiByeByByeHiHiHi"; 
str = str.replace("Bye", ""); 
System.out.println(str); 
0

爲什麼你不使用String::replace方法,你可以一次性全部更換髮生:

str.replace("Bye", "") 

,所以你只需要這樣:

String str = "HiByeHiByeByByeHiHiHi"; 
System.out.println(str.replace("Bye", "")); 

輸出

HiHiByHiHiHi 
1

您可以使用replaceAll。

String str = "HiByeHiByeByByeHiHiHi"; 
System.out.println(str.replaceAll("Bye", "")); 

它會打印:

HiHiByHiHiHi

+1

爲什麼正則表達式,你沒有需要一個正則表達式,只需一個簡單的替換就可以做到這一點 –

+0

@shanemcg如果你對這個答案感到滿意,那麼請接受它,並加註它。 –

0

的一些問題在代碼

  • STR仍在使用,但它是一個不變的,應該不是某人
  • 我必須在刪除情況下或if遞減由while

    String str = "HiByeHiByeByByeHiHiHi"; 
    StringBuilder sb = new StringBuilder(str); 
    for (int i = 0 ; i < sb.length() - 2 ; i++) { 
        while (sb.substring(i, i + 3).equals("Bye")) { 
         sb.delete(i, i + 3); 
        } 
    } 
    System.out.println(sb.toString()); 
    
相關問題