2014-02-27 89 views
2

嗨即時嘗試創建一個方法來遞歸地從單詞中刪除空格。我到目前爲止做了這個,我真的不知道爲什麼它不工作。使用遞歸從字符串替換某個索引處的字符

public static String compact (String line) 
{ 

    for (int x = 0 ; x < line.length() ; x++) 
    { 
     if (line.charAt (x) == ' ') 
     { 
      String newLine = line.substring (0, x) + line.substring (x); 
      return compact (newLine); 
     } 
     else 
      break; 
    } 
    return line; 
} 

這只是返回原始字符串不刪除任何空格。 有人可以告訴我什麼即時做錯了,謝謝。

+0

你爲什麼這樣做? :/ – Maroun

+0

提示:刪除for循環,添加一個參數來確定你的「字符數組」的當前選定的字符,這樣做,你可以做一個完整的遞歸循環,也不要忘記字符的數量改變,因爲你'除去空格,你必須給他新的字符串。 –

+0

但實際上這是不好的做法,我不認爲使用遞歸這樣的事情是有道理的。如果你想練習遞歸,用文件夾做一些事情,刪除等等。 –

回答

4

只需卸下

else break; 

部分,因爲如果你的字符串的第一個字符不是空白,循環將終止

而且取代

String newLine = line.substring (0, x) + line.substring (x); 

String newLine = line.substring (0, x) + line.substring (x + 1); 

,因爲你實際上並沒有刪除空格,而是一遍又一遍地複製整個字符串。這就是爲什麼你得到StackOverflowError


的方法應該是這樣的:

public static String compact(String line) { 
    for (int x = 0; x < line.length(); x++) { 
     if (line.charAt(x) == ' ') { 
      String newLine = line.substring (0, x) + line.substring (x+1); 
      return compact(newLine); 
     } 
    } 
    return line; 
} 
+0

然後我得到一個stackoverflow錯誤... – Noob

+2

並用'String newLine = line.substring(0,x)+行替換'String newLine = line.substring(0,x)+ line.substring(x);''。 substring(x + 1);' – henryabra

+0

我會補充一點。謝謝,@henryabra –

0

可以擺脫的for循環和修復,在一行代碼...

只要使用..

//changes a string "moon shine" to "moonshine" 
    String newLine = line.trim().replaceAll(" +", ""); 
    System.out.println(newLine); 
+0

我非常確定OP是在做遞歸練習,而不是認爲這是做這件事的最好方法。 – NoseKnowsAll