java - .equals() 的问题

标签 java split equals

以下是我正在使用的代码的一小部分,以及我正在使用的文本文件的语法。 (我相当确定两者都过于复杂,但我不太确定如何简化它们。)

        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/

相关文章:

java - Android - ListView 的问题

arrays - 如何在T-SQL中分割字符串并保存到数组中

c# - GetHashCode问题

java - Java中使用equals方法查找相等的对象

java - 除某些方法外, Sonar 违规

Java Reflection - 如何为从 One 和 Two 扩展的类设置值

java - 在 .jar 导出中使用 .mid 文件

java - OpenCSV 扁平化到层次结构数据解析

java - 如何将 ArrayList 拆分为多个列表?

php - 分解逗号和管道上的字符串以创建两个数组