Проблема с Parse Int / Parse long NumberFormatException - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь преобразовать строку в Long / Int и получаю исключение NumberFormatException. Строка - это число, которое я не понимаю. Я попытался разобрать до двойника и получил бесконечность. Что я делаю не так?

public class EncryptDecrypt {
private char[] localKey;
private long keyNumber;
public EncryptDecrypt(char[] localKey) {
    this.localKey = localKey; // Brings in 256 random characters
    keyNumber = makeKeyNumber(localKey); 
    System.out.println(keyNumber); //prints long

}
private long makeKeyNumber(char[] key) {
    StringBuilder keyString = new StringBuilder();
    for(int i = 0; i<key.length; i++) {   //Builds String from chatacter array
        int ascii = (int) key[i];
        keyString.append(ascii);
    }
    String s = keyString.toString(); // Makes a string from stringbuilder
    long keyNum = Long.parseLong(s); // Attempts to convert string to long

    return keyNum; //returns long
}

}

Ошибка

Exception in thread "main" java.lang.NumberFormatException: For input string: "1121214840113493593108124959933124991191111155510211549117935560351251051181216112311811354631064111712563371141044610510739101436457101108361109395411095555121465711133107466391125103119411219910436575950469549424363114114614597491064011312110398491254136371199942110115985141102122464410410060611086111311011210811242123981091054612045104911091191231131164345115124991245638913543123394658985539123112117113421225444351169157529911549435933949598434157591021241194249113425311535454957111108107611074064113944040601001145036333610510548933848994911550118593511910712163581141209743101643361100113999954931191246395107"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Long.parseLong(Long.java:699)
at java.base/java.lang.Long.parseLong(Long.java:824)
at EncryptDecrypt.makeKeyNumber(EncryptDecrypt.java:18)
at EncryptDecrypt.<init>(EncryptDecrypt.java:7)
at Main.main(Main.java:15)

1 Ответ

1 голос
/ 19 января 2020

1121214840113493593108124959933124991191111155510211549117935560351251051181216112311811354631064111712563371141044610510739101436457101108361109395411095555121465711133107466391125103119411219910436575950469549424363114114614597491064011312110398491254136371199942110115985141102122464410410060611086111311011210811242123981091054612045104911091191231131164345115124991245638913543123394658985539123112117113421225444351169157529911549435933949598434157591021241194249113425311535454957111108107611074064113944040601001145036333610510548933848994911550118593511910712163581141209743101643361100113999954931191246395107

Слишком большой, чтобы поместиться в любой целочисленный тип данных. Таким образом, я рекомендую BigInteger для этого случая.

...