以下是我正在使用的代码的一小部分,以及我正在使用的文本文件的语法。 (我相当确定两者都过于复杂,但我不太确定如何简化它们。)
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 不是 String,例如 int,则 equals 仍然有效(原始 int 会自动装箱为 java.lang.Integer,它是 java.lang.Object 的子类,而 java.lang.Object 是 equals 方法的类型作为参数),但比较("1".equals(1)
)将始终返回 false。 JavaScript 可以将字符串与 int 等同("1"== 1
返回 true),但 Java 则不然。
最简单的解决方法是通过调用 String#valueOf 传入 lineNumber 将 lineNumber 转换为字符串。将 lineNumber 转换为字符串比尝试将分割输出转换为整数更好,因为整数解析可能会因输入错误而失败,我宁愿避免管理这种可能性。
拆分调用的剪切粘贴是不幸的,主要是因为冗余,您应该将拆分一次到局部变量中,例如:
String[] parts = line.split("@@");
if (parts[0].equals("1")) {
numberOfLines = Integer.parseInt(parts[1]);
...
关于java - .equals() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28372369/