Je sens que je dois manquer quelque chose de simple, mais je reçois un NumberFormatException
sur le code suivant:
System.out.println(Integer.parseInt("howareyou",35))
Il peut convertir la chaîne yellow
à partir de la base 35, je ne comprends pas pourquoi j'obtiendrais un NumberFormatException
sur cette chaîne.
Parce que le résultat sera supérieur à Integer.MAX_VALUE
Essaye ça
System.out.println(Integer.parseInt("yellow", 35));
System.out.println(Long.parseLong("howareyou", 35));
et pour
Long.parseLong("abcdefghijklmno",25)
vous avez besoin BigInteger
Essayez ceci et vous comprendrez pourquoi
System.out.println(Long.MAX_VALUE);
System.out.println(new BigInteger("abcdefghijklmno",25));
Depuis les JavaDocs:
Une exception de type
NumberFormatException
est levée si l'une des situations suivantes se produit:
- Le premier argument est
null
ou est une chaîne de longueur zéro. FAUX: "howareyou" n'est pasnull
et plus de 0 longueur- Le radix est soit plus petit que
Character.MIN_RADIX
ou plus grand queCharacter.MAX_RADIX
. FAUX: 35 est dans la plage [2,36]- Tout caractère de la chaîne n'est pas un chiffre du radix spécifié, sauf que le premier caractère peut être un signe moins '-' ('\ u002D') ou un signe plus '+' ('\ u002B') à condition que la chaîne soit plus long que la longueur 1. FAUX: tous les caractères de "howareyou" sont dans la plage radix [0, 'y']
- ==> La valeur représentée par la chaîne n'est pas une valeur de type
int
. TRUE: la raison de l'exception. La valeur est trop grande pour unint
.
Long
ou BigInteger
doit être utilisé
Se pourrait-il que le nombre soit> Integer.MAX_VALUE
? Si j'essaye votre code avec Long
à la place, cela fonctionne.
Le nombre devient plus grand que Integer.MAX_VALUE
Essaye ça:
System.out.println(Integer.parseInt("yellow", 35));
System.out.println(Long.parseLong("howareyou", 35));
Comme on le voit dans les commentaires de René Link, vous recherchez quelque chose comme ça en utilisant un BigInteger :
BigInteger big=new BigInteger("abcdefghijklmno", 25);
Quelque chose comme ça:
System.out.println(Long.MAX_VALUE);
System.out.println(new BigInteger("abcdefghijklmno",25));
Les réponses précédentes de parseLong seraient correctes, mais parfois elles ne sont pas assez grandes donc l'autre option consisterait à utiliser un BigInteger.
Long.parseLong("howareyou", 35)
new BigInteger("howareyou", 35)
Comme vous pouvez le voir, vous manquez d'espace dans votre Integer
. En le remplaçant par un Long
, vous obtenez le résultat souhaité. Voici le lien IDEOne vers le code de travail .
Code
System.out.println(Integer.parseInt("YELLOW",35));
System.out.println(Long.parseLong("HOWAREYOU",35));
Le nombre produit est trop grand pour un Java Entier, utilisez un Long.