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

时间:2013-01-04 14:44:07

标签: 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();

这会返回以下错误:

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)

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

2 个答案:

答案 0 :(得分:6)

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

  

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

要将其用于更多数字,您必须使用BigIntegerlink to documentation)。

java.util.Scanner filereader = new java.util.Scanner(new File("File.txt"));
bigInt = new BigInteger(filereader.nextLine());

答案 1 :(得分:1)

37107287533902102798显然不在远程范围内,因此您获得例外。

你应该使用BigInteger来读取这些值。

BigInteger in = new BigInteger("37107287533902102798");