我正在用java创建一个游戏引擎,我已经开始研究一个新的保存文件,而不是使用地图的图像:
工作并打印出每一行:
while ((readString = buf.readLine()) != null) {
System.out.println("Failed to assign action to line: " + readString);
}
不起作用,打印出前3行:
while ((readString = buf.readLine()) != null) {
if (readString.contains("Width:")){
readString.replace("Width:", "");
readString.trim();
Integer.parseInt(readString);
System.out.println(readString);
}else if (readString.contains("Height:")){
readString.replace("Height::", "");
readString.trim();
Integer.parseInt(readString);
System.out.println(readString);
}else{
System.out.println("Failed to assign action to line: " + readString);
}
}
正如您所看到的,最上面的一个正在工作并打印出每一行到控制台,第二个在读完第三行后停止。在研究问题时我没有找到任何东西,我的语法似乎是正确的。我的代码出了什么问题?
答案 0 :(得分:5)
可能有一个例外,你没有看到。
把它放在你的代码周围:
try {
//.. your while-loop here
}
catch(Exception e) {
e.printStackTrace();
}
然后修复错误。
另一个提示:readString.replace("Width:", "")
,readString.trim()
和Integer.parseInt(readString)
无效。
函数本身不会更改变量,您需要将结果分配给变量。
示例:
readString = readString.trim();
答案 1 :(得分:0)
可能有一个例外,即您正在吞咽(捕捉和忽略)您的计划,这是最可能的候选人:
字符串是不可变的,所以当你替换/修剪原始字符串是相同的,并返回一个新字符串。
} else if (readString.contains("Height:")){
readString.replace("Height::", "");
readString.trim();
Integer.parseInt(readString);
这里忽略返回的(新)字符串并继续对原始字符串进行操作。此外,您可以看到检查Height:
并删除Height::
(注意双冒号)。因此,除非您的数据实际包含Height::
,否则Height:
会在调用Integer.parseInt
时留在字符串中,从而导致异常。
它应该更像是
} else if (readString.contains("Height:")){
readString = readString.replace("Height:", "");
readString = readString.trim();
Integer.parseInt(readString);