以下是我正在使用的代码的一小部分,以及我正在使用的文本文件的语法。(我很确定两者都过于复杂,但是我不确定如何简化它们。)
while((line = bufferedReader.readLine()) != null)
{
if(line.split("@@")[0].equals(lineNumber))
{
numberOfLines = Integer.parseInt(line.split("@@")[1]);
spaceSkip = 1;
worked = 0;
}
if(spaceSkip == 0)
{
if(numberOfLines > 0)
{
System.out.println(line);
numberOfLines--;
}
}
spaceSkip = 0;
}
文本文件的格式为:1 @@ 2 @@ 3 @@ 0文本位于其下方,并且可以跨越多行。
3和0在这里不起作用。程序的目的是搜索所选的数字并将其与第一个数字(在这种情况下为1)匹配。第二个数字是要读取的行数。在代码中,我有“ spaceSkip”,因此它不读取索引行。
除了解释,我遇到的问题line.split("@@")[0].equals(lineNumber)
似乎是读错了。我同时将它们都打印到屏幕上,并且都等于1,但是它仍然返回我包含的错误消息。(“ worked = 0;”是阻止错误触发的原因。)我敢肯定,这是我在这里犯的一个愚蠢的简单错误,但我仍然无法弄清楚。先感谢您。
每当比较未返回您认为应该的结果时,请检查类型是否符合您的想法。
String#split返回一个字符串数组。对于给定的输入,该数组的第一个元素将为“ 1”。如果lineNumber不是字符串,例如int,则equals仍然有效(原始int自动装箱到java.lang.Integer,这是java.lang.Object的子类,equals方法的类型用作参数),但比较("1".equals(1)
)始终返回false。JavaScript可以用字符串和int相等("1" == 1
返回true),但Java不行。
最简单的解决方法是,通过传入lineNumber来调用String#valueOf,将lineNumber转换为String。将lineNumber转换为String而不是尝试将拆分输出转换为Integer会更好,因为在输入错误的情况下Integer解析可能会失败,而我宁愿避免必须管理这种可能性。
不幸的是,拆分调用的cut-n-pasting主要是因为冗余,您应该将拆分一次分解为一个局部变量,例如:
String[] parts = line.split("@@");
if (parts[0].equals("1")) {
numberOfLines = Integer.parseInt(parts[1]);
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句