2014-01-07 62 views
0

下面的代碼給了我一個頭痛的問題:在替換所有的\ n之後,它應該跳出do - while循環,但它不會。任何想法如何解決這個問題?java:代碼保持循環

public String invoerenTemplate(){ 
     String templateGescheiden = null; 
     String teHerkennenTemplate = Input.readLine(); 
     String uitvoer = teHerkennenTemplate; 

     do {    
      templateGescheiden = teHerkennenTemplate.substring(0, teHerkennenTemplate.indexOf(" ")); 

      templateGescheiden += " "; 

      if (templateGescheiden.charAt(0) == '\\' && templateGescheiden.charAt(1) == 'n') { 
       teHerkennenTemplate = teHerkennenTemplate.replace(templateGescheiden, "\n"); 
       uitvoer = uitvoer.replace(templateGescheiden, "\n"); 
      } 
      teHerkennenTemplate = teHerkennenTemplate.substring(teHerkennenTemplate.indexOf(" ")); 

      System.out.println(uitvoer); 
      } while (teHerkennenTemplate.length() > 0); 
      return uitvoer; 

    } 

編輯:

我現在放在這條線:teHerkennenTemplate.trim();只是我的if語句下面,但現在它給了我一個StringIndexOutOfRange: 0錯誤在我的我的if語句

+4

什麼是您的終止條件?它會評估爲「假」嗎? –

+0

我在空格子串'teHerkennenTemplate',所以最終應該是空的 – user3165926

+0

teHerkennenTemplate是否有可能卡在帶「」(空格)的字符串上,所以行teHerkennenTemplate = teHerkennenTemplate.substring(teHerkennenTemplate.indexOf(「 「)); 總是有相同的效果? 嘗試在上面的行後面添加打印到teHerkennenTemplate進行調試。 – Wasafa1

回答

0

我有第一線注意到上面的代碼存在一些問題,儘管很難說出爲什麼你採用瞭解決方案。

我發現的主要問題是,你的替代語句不刪除\n字符

teHerkennenTemplate = teHerkennenTemplate.replace(templateGescheiden, "\n"); 
uitvoer = uitvoer.replace(templateGescheiden, "\n"); 

從Java文檔:

更換(字符oldChar,焦炭newChar):

返回一個新的字符串,其結果是將此字符串中出現的所有oldChar替換爲n ewChar。


所以,你與\n每次更換您的字符串templateGescheiden你循環。

另一個問題是不正確縮短您的teHerkennenTemplate字符串每個循環,這會導致它不能正確終止。它將始終從下一個空格字符縮短到字符串末尾(含) - 意味着它永遠不會是空字符串,但始終有一個" "

我的建議是調試和走一步看一步,看看那裏的縮短和字符串操作是不是做你想要什麼,然後評估的原因和修改代碼適當

0

有各種各樣的事情錯誤與代碼:

  • 在與字符串indexOf("\n")字符串中找到回車索引。
  • teHerkennenTemplate的子串沒有考慮到它以一個空格開始,這會導致循環一直持續下去。

做你想做的最簡單的方法是用正則表達式:

"test \n test \n".replaceAll("\n", "") 

返回結果:

"test test " 

如果你在使用一個循環設置,那麼這將辦相同:

public static String invoerenTemplate(String teHerkennenTemplate) 
{ 
    StringBuilder result = new StringBuilder(); 

    while (teHerkennenTemplate.length() > 0) 
    { 
    int index = teHerkennenTemplate.indexOf("\n"); 
    result.append(index > -1 ? teHerkennenTemplate.substring(0, index) : teHerkennenTemplate); 

    teHerkennenTemplate = teHerkennenTemplate.substring(index + 1, teHerkennenTemplate.length()); 
    } 

    return result.toString(); 
}