java:代码不断循环
下面的代码让我头疼:它应该在替换所有的\n之后跳出do while循环,但它没有。有什么办法解决这个问题吗java:代码不断循环,java,loops,Java,Loops,下面的代码让我头疼:它应该在替换所有的\n之后跳出do while循环,但它没有。有什么办法解决这个问题吗 public String invoerenTemplate(){ String templateGescheiden = null; String teHerkennenTemplate = Input.readLine(); String uitvoer = teHerkennenTemplate; do {
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语句的第一行给了我一个StringIndexOutfrange:0错误我注意到上面的代码有几个问题,尽管很难告诉您为什么要采用您想要的解决方案 我注意到的主要问题是,replace语句没有删除\n字符
teHerkennenTemplate = teHerkennenTemplate.replace(templateGescheiden, "\n");
uitvoer = uitvoer.replace(templateGescheiden, "\n");
来自Java文档:
replacechar oldChar,char newChar:
返回一个新字符串,该字符串由newChar替换该字符串中所有出现的oldChar生成
因此,每次循环时,您都将字符串templateGescheiden替换为\n
另一个问题是对每个循环的Teherkenntemplate字符串的不正确缩短,这导致它不能正确终止。它将始终从下一个空格字符缩短到包含空格的字符串的结尾,这意味着它永远不会是空字符串,而是始终具有空格
我的建议是调试并逐步查看缩短和字符串操作没有达到您想要的效果的地方,然后评估原因并适当修改代码代码中存在各种错误: 回车的索引在indexOf字符串中找到\n。 Teherkenntemplate的子字符串没有考虑到它以空格开头,这会导致循环永远继续。 执行所需操作的最简单方法是使用正则表达式:
"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();
}
你的终止条件是什么?它是否会计算为false?我在空格处替换'TeherKennentTemplate',因此最终应为空。TeherKennentTemplate是否可能卡在带空格的字符串上,因此行TeherKennentTemplate=TeherKennentTemplate.SubstringTeherKennentTemplate.indexOf;总是有同样的效果吗?尝试在上面的调试行之后向TeherKennentTemplate添加一个打印。就是这样,我添加了一个打印行,如果我的输入是:test\n test\n它将打印:\n test\n我尝试修剪TeherKennentTemplate服务器循环,但仍然不起作用