Как решить NumberFormatException в Java при попытке преобразовать очень большое число из строки - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь преобразовать каждый символ строки в его значение 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)

Ответы [ 4 ]

0 голосов
/ 09 мая 2018

Если вы используете Java 8+, попробуйте это:

String input = "Z8IG4";
BigDecimal result = new BigDecimal(
        input.chars().mapToObj(String::valueOf).collect(Collectors.joining())
);

выход

9056737152
0 голосов
/ 09 мая 2018

Это ', поскольку максимальное значение, поддерживаемое int, равно 2147483647, а ваше значение выходит за пределы диапазона.

Вы можете найти максимальное значение с помощью Integer.MAX_VALUE

Вы можете использовать BigInteger f = new BigInteger(nm); для этого

0 голосов
/ 09 мая 2018

Я бы просто перебрал символы и добавил их в StringBuilder:

String m = "Z8IG4";
StringBuilder builder = new StringBuilder();
for (char c : m.toCharArray()) {
    builder.append((int) c);
}
System.out.println(builder.toString());
0 голосов
/ 09 мая 2018

Это может быть проще:

    final StringBuilder result = new StringBuilder();
    "Z8IG4".chars().forEach((i) -> result.append(i));
    System.out.println(result.toString());
...