下面的代码令我头疼:它应该在替换所有\ 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
错误
答案 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();
}