我正在尝试使用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+数字吗?
答案 0 :(得分:6)
long
无法存储无限长度的数字。它只能达到(2^63)-1
。见这里:(link)。
长数据类型是64位带符号的二进制补码整数。它有 最小值为-9,223,372,036,854,775,808,最大值为 9,223,372,036,854,775,807(含)。当您使用此数据类型时 需要一系列比int提供的更宽的值。
要将其用于更多数字,您必须使用BigInteger
(link 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");