使用Java Scanner读取长类型 - 字符限制?

0 java java.util.scanner long-integer

我正在尝试使用Java Scanner从文本文件(File.txt)中读取20位长.

java.util.Scanner filereader = new java.util.Scanner(new File("File.txt"));
longNumber = (long) filereader.nextLong();
Run Code Online (Sandbox Code Playgroud)

这将返回以下错误:

Exception in thread "main" java.util.InputMismatchException: For input string: "37107287533902102798"
at java.util.Scanner.nextLong(Scanner.java:2271)
at java.util.Scanner.nextLong(Scanner.java:2225)
at scanner.Scanner.main(Scanner.java:14)
Run Code Online (Sandbox Code Playgroud)

当我将数字的长度减少到19位或更少时,它运行得很好.有人可以解释我如何使用20+数字吗?

Doo*_*nob 6

long无法存储无限长度的数字.它只能达到(2^63)-1.见这里:( 链接).

长数据类型是64位带符号的二进制补码整数.它的最小值为-9,223,372,036,854,775,808,最大值为9,223,372,036,854,775,807(含).当需要比int提供的值更宽的值时,请使用此数据类型.

要将其用于更多数字,您必须使用BigInteger(链接到文档).

java.util.Scanner filereader = new java.util.Scanner(new File("File.txt"));
bigInt = new BigInteger(filereader.nextLine());
Run Code Online (Sandbox Code Playgroud)