2013-01-04 47 views
0

我正在嘗試使用Java掃描儀從文本文件(File.txt)中讀取20位長的數字。使用Java掃描器讀取長類型 - 字符數限制?

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位數字?

回答

6

long不能存儲無限長度的數字。它僅上升到(2^63)-1。看到這裏:(link)。

The long data type is a 64-bit signed two's complement integer. It has a minimum value of -9,223,372,036,854,775,808 and a maximum value of 9,223,372,036,854,775,807 (inclusive). Use this data type when you need a range of values wider than those provided by int.

要使用更多的數字,你必須使用一個BigIntegerlink to documentation)。

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

+1提供替代方案。 – Mob

+0

謝謝!替代品也是如此。 –

+0

@HettyWeston不客氣:) – Doorknob

1

37107287533902102798明顯超出範圍,因此您會得到例外。

您應該使用BigInteger來讀取這些值。

BigInteger in = new BigInteger("37107287533902102798"); 
+0

謝謝!替代品也是如此。 –

+0

@HettyWeston歡迎您:) – PermGenError