【问题标题】:How do i compare a Long variable to null如何将 Long 变量与 null 进行比较
【发布时间】:2012-04-15 20:41:41
【问题描述】:

所以我制作了一个 txt 文件阅读器,该文件有一堆“长”行,因为它是一个素数查找程序,它将数字写入 txt。当我停止程序,然后重新启动它时,我希望它从停止的地方开始。这意味着我必须让它检查每一行并确保它正在读取某些内容,并且缓冲的阅读器被列为很长。这是代码:

try{
        FileReader fileReader = new FileReader(fileLocation);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        long stringRead = bufferedReader.read();

        while (stringRead != null)
        {
            stringRead = bufferedReader.read();
            currentNum =  stringRead;
        }

        bufferedReader.close();
        }
        catch(FileNotFoundException filenotfoundexxeption){
            System.out.print("file does not exist");
        }
        catch(IOException ioexception){
            ioexception.printStackTrace();
        }
}

所以问题是它不喜欢stringRead != null,否则我不知道该怎么做。我是菜鸟,所以请使用已经列出的代码回答。谢谢!

【问题讨论】:

  • 在不解析为longlong stringRead = bufferedReader.read();的情况下如何在您的代码中工作?

标签: java long-integer primes bufferedreader filereader


【解决方案1】:

你可能应该这样做

String line;
while ((line = bufferedReader.readLine()) != null)
{
    currentNum = Long.parseLong(line);
}

readLine() 将在到达文件末尾时返回 null。

【讨论】:

  • 嗯,Scanner 为这个任务提供了一个更简单的 API。
  • 正如马特鲍尔所说,只是为了启蒙,也请查看Scanner。这是直接来自 Javadoc 类的粘贴:Scanner sc = new Scanner(new File("myNumbers")); while (sc.hasNextLong()) { long aLong = sc.nextLong(); }
【解决方案2】:

long 是原始类型,因此它不能是 null。另一方面,Long 是一个引用类型,所以它可以null

无论哪种方式,BufferedReader#read() 返回一个int,代表一个单个字符,而不是整行。您应该使用#readLine() 结合Long#parseLong()

考虑改用Scanner,这将大大简化您的代码。

Scanner scanner = new Scanner(new File(fileLocation));

while (scanner.hasNextLong())
{
    currentNum = scanner.nextLong();
}

【讨论】:

  • 这对他没有帮助。 read 方法返回一个原语。他需要做点别的事情。
  • @MarkoTopolnik 是真的。已编辑。
【解决方案3】:

long 不能为空,它要么为 0(未初始化,或已分配为 0),要么不为 0。您可能希望使用readLine 方法并使用Long.parseLong() 将结果解析为long,而不是使用read 读取每个字符。

【讨论】:

    【解决方案4】:

    longprimitive datatype,不能为空。如果它没有初始化它的 0 。但是,您可以使用 Long 包装类。例如Long stringRead = new Long(bufferedReader.read());。但是,在您的情况下,情况绝不会如此,因为read() 永远不会返回null,如果它是文件的结尾,则只会返回-1。所以你的支票应该是while(stringRead!=-1)

    【讨论】:

      【解决方案5】:

      每行只有一个号码?您必须使用readLine 阅读,这将为您提供作为字符串的行。然后用Long.parseLong 解析它。你可以检查你从readLine得到的字符串不为空。

      【讨论】:

        【解决方案6】:

        根据the official documentationBufferedReader#read 返回 int。

        读取的字符,为 0 到 65535 范围内的整数 (0x00-0xffff),如果已到达流的末尾,则为 -1

        也就是说你可以检查返回的是否不等于-1。

        【讨论】:

          【解决方案7】:

          long 是一个原语,因此它不能为 null,而且 BufferedReader.read 返回 int,因此您可以通过更改此行来简单地使其工作

          long stringRead = bufferedReader.read();
          

          Integer stringRead = bufferedReader.read();
          

           Long stringRead = new Long(bufferedReader.read());
          

          Java 1.5 及更高版本自动将 int 包装为 Integer。

          【讨论】:

            猜你喜欢
            • 2019-05-05
            • 1970-01-01
            • 1970-01-01
            • 2020-10-20
            • 1970-01-01
            • 2013-01-17
            • 2013-05-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多