如果我在while循环中添加if语句,Java缓冲读取器将停止读取行:

时间:2014-01-05 20:28:48

标签: java buffered

我正在用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);
                }
}

正如您所看到的,最上面的一个正在工作并打印出每一行到控制台,第二个在读完第三行后停止。在研究问题时我没有找到任何东西,我的语法似乎是正确的。我的代码出了什么问题?

2 个答案:

答案 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);