java:代码保持循环

时间:2014-01-07 15:48:49

标签: java loops

下面的代码令我头疼:它应该在替换所有\ n之后跳出do-while循环,但事实并非如此。任何想法如何解决这个问题?

 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语句之下,但现在它在我的if语句的第一行给出了StringIndexOutOfRange: 0错误

2 个答案:

答案 0 :(得分:0)

我注意到上述代码存在一些问题,尽管很难说出为什么采用的方法是解决方案。

我注意到的主要事情是你的替换语句不会删除\n个字符

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

来自Java文档:

  

replace(char oldChar,char newChar):

     

返回一个新字符串,该字符串是用newChar替换此字符串中所有出现的oldChar而生成的。


因此,每次循环时,您都会用templateGescheiden替换字符串\n

另一个问题是每个循环不正确缩短teHerkennenTemplate字符串,导致它无法正确终止。它将总是从下一个空格字符的字符串(含)的末端缩短 - 这意味着它绝不会是一个空字符串,但总是有一个" "

我的建议是调试和走一步看一步,看看那里的缩短和字符串操作是不是做你想要什么,然后评估为何并适当地修改代码

答案 1 :(得分: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();
}