所以我正在读这个:
10011011001;0110,1001,1001,0,10,11
并在其上运行此代码:
String[] parts = line.split(";");
System.out.println("Part 1 = " + parts[0]);
System.out.println("Part 2 = " + parts[1]);
System.out.println(isNumeric(parts[0]));
int original = Integer.parseInt(parts[0]);
System.out.println("Original = " + original);
isNumeric
方法是我写的调试方法。
public static boolean isNumeric(String str) {
for (char c : str.toCharArray()) {
if (!Character.isDigit(c)) {
return false;
}
}
return true;
}
输出:
Line = 10011011001;0110,1001,1001,0,10,11
Part 1 = 10011011001
Part 2 = 0110,1001,1001,0,10,11
true
Exception in thread "main" java.lang.NumberFormatException: For input string: "10011011001"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at str_substitution.main(str_substitution.java:45)
不知道为什么这个例外,显然字符串是数字的,有效的。
答案 0 :(得分:6)
10,011,011,001太大,无法容纳32位整数。
也许您的意思是使用long
和parseLong()
?
或者您是否真的想用parseInt(parts[0], 2)
将其解析为二进制数(十进制1241)?
Here you can check the minimum and maximum values for each Java data type
答案 1 :(得分:1)
您的数字是100亿,而Java的整数最大值约为-2b - 2b。因此它是不可解决的。
也许您想使用parseInt(String s,int radix)
将其作为二进制数读取?或parseLong()
。
来自Javadoc(类似案例) -
parseInt("2147483648", 10) throws a NumberFormatException
答案 2 :(得分:0)
也许您想使用Long.parseLong()
代替Integer.parseInt()
?