2014-01-07 61 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(); 
}