尝试从 String 转换非常大的数字时如何解决 Java 中的 NumberFormatException
How to solve NumberFormatException in Java when trying to convert a very large number from String
我正在尝试将字符串的每个字符转换为其 ascii 值并将这些值连接到 int。
示例:
input:
"Z8IG4"
output:
9056737152.
到目前为止我所做的是:
String m = "Z8IG4";
String nm = "";
for(int i=0; i<m.length(); i++){
char c = m.charAt(i);
int cm = (int) c;
nm+=Integer.toString(cm);
}
int foo = Integer.parseInt(nm);
System.out.println(foo);
这不起作用,我不知道我做错了什么。
错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "9056737152"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at java.lang.Integer.parseInt(Integer.java:615)
at HelloWorld.main(HelloWorld.java:22)
这可能更简单:
final StringBuilder result = new StringBuilder();
"Z8IG4".chars().forEach((i) -> result.append(i));
System.out.println(result.toString());
这是因为 int
支持的最大值是 2147483647
而您的值超出范围。
您可以使用 Integer.MAX_VALUE
找到最大值
你可以使用 BigInteger f = new BigInteger(nm);
来完成这个
我只是循环遍历字符并将它们添加到 StringBuilder:
String m = "Z8IG4";
StringBuilder builder = new StringBuilder();
for (char c : m.toCharArray()) {
builder.append((int) c);
}
System.out.println(builder.toString());
如果您使用的是 java 8+,试试这个:
String input = "Z8IG4";
BigDecimal result = new BigDecimal(
input.chars().mapToObj(String::valueOf).collect(Collectors.joining())
);
输出
9056737152
我正在尝试将字符串的每个字符转换为其 ascii 值并将这些值连接到 int。
示例:
input:
"Z8IG4"
output:
9056737152.
到目前为止我所做的是:
String m = "Z8IG4";
String nm = "";
for(int i=0; i<m.length(); i++){
char c = m.charAt(i);
int cm = (int) c;
nm+=Integer.toString(cm);
}
int foo = Integer.parseInt(nm);
System.out.println(foo);
这不起作用,我不知道我做错了什么。
错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "9056737152"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at java.lang.Integer.parseInt(Integer.java:615)
at HelloWorld.main(HelloWorld.java:22)
这可能更简单:
final StringBuilder result = new StringBuilder();
"Z8IG4".chars().forEach((i) -> result.append(i));
System.out.println(result.toString());
这是因为 int
支持的最大值是 2147483647
而您的值超出范围。
您可以使用 Integer.MAX_VALUE
你可以使用 BigInteger f = new BigInteger(nm);
来完成这个
我只是循环遍历字符并将它们添加到 StringBuilder:
String m = "Z8IG4";
StringBuilder builder = new StringBuilder();
for (char c : m.toCharArray()) {
builder.append((int) c);
}
System.out.println(builder.toString());
如果您使用的是 java 8+,试试这个:
String input = "Z8IG4";
BigDecimal result = new BigDecimal(
input.chars().mapToObj(String::valueOf).collect(Collectors.joining())
);
输出
9056737152