尝试从 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