2015-01-02 70 views
-1

作爲一個java初學者,我試圖完成一個簡單的練習,以從數組中的每個元素中刪除字符'a'的所有實例的字符串,然後打印所有元素。循環遍歷一個字符串數組,並刪除元音'a'(java)

下面的代碼,只是輸出數組不變(仍然包含a)。

我相信我已經找到了實現它的另一種方法,但我仍然無法明白爲什麼下面的失敗,併爲了學習的目的想知道。任何意見,將不勝感激。

public static void main(String[] args) { 
    String instruments[] = {"cello", "guitar", "violin", "double bass"}; 

    for (int i = 0; i < instruments.length; i++) { 
     String str = instruments[i]; 

     for (int b = 0; b < str.length(); b++) { 
      char a = str.charAt(b); 

      if (str.charAt(b) == 'a') { 
       str.replace("a", ""); 
      } 
     } 
     System.out.println(str); 
    } 
} 
+1

字符串是不可變的。對String的每個修改都會返回一個新的String。所以你需要重新分配替換結果 –

回答

3

String.replace回報新的字符串。在上面的代碼片段中,從不使用返回值。嘗試是這樣的:

instruments[i] = str.replace("a", ""); 

而且也沒有必要檢查字符串str是否包含「A」,只是做一個replace,因爲它會做什麼,如果針(「A」)未找到,就像你會期待的。這反過來使內部循環過量並且可以被移除。到底你有這樣的事情:

for (int i = 0; i < instruments.length; i++) { 
    instruments[i] = instruments[i].replace("a", ""); 
} 
+1

非常感謝!使用該方法時應該更加註意API。 – javapalava

0

這裏是解決方案: 記住:String對象是不可變的!

public static void main(String[] args) { 

String instruments[] = {"cello", "guitar", "violin", "double bass"}; 

for (int i = 0; i < instruments.length; i++) { 
    instruments[i] = instruments[i].replace("a", ""); 
    System.out.println(instruments[i]); 
    } 
}