-1
votes

NumberFormatXception lorsque j'essaie de convertir une chaîne de 3 caractères en entier

"Exception dans le fil" Main "java.lang.numberformatException: pour la chaîne d'entrée:" L20 ""

Il s'agit du message d'erreur que j'ai reçu pour essayer de taper une chaîne de 3 chiffres à int.

Si j'ai bien compris la valeur maximale pour INT en Java est 2147483647?

Il s'agit de la méthode qui a provoqué la syntaxe xxx

Modifier: Pour clarification, la clé est une chaîne 12 bits générée au hasard par le code suivant xxx

edit 2: ci-dessous est un exemple de reproductible minimal et produit ce message d'erreur. "Exception dans le fil" Main "Java.lang.numberFormatxception: pour la chaîne d'entrée:" L35 " à java.lang.numberformatException.forinPutString (NumberFormatxception.java:65) à java.lang.integer.parseint (INTEGER.JAVA:580) à java.lang.integer.parseint (INTEGER.JAVA:615) Au test.Gutée (test.java:57) Au test.getkey (test.java:44) Au test.encode (test.java:36) Au test.Main (test.java:70) " xxx


8 commentaires

Est-ce que ce premier chiffre un "un"? Cela ressemble presque à un «œil» capitale pour moi.


VI dit que c'est une minuscule "ell".


je suis confus, il ne devrait pas y avoir de l dans la corde


@Icarus Je pense que vous devez modifier votre question pour fournir plus de contexte à la manière dont cette erreur se produit. Je suis d'accord avec vous que ce que vous avez montré jusqu'à présent ne causera pas l'erreur que vous obtenez. Pouvez-vous s'il vous plaît fournir un exemple de reproductible minimal ?


Indice: integer.tostring () n'est pas nécessaire dans la concaténation de la chaîne ...


Si vous copiez / collez le texte dans un convertisseur UNICODE-TO-HEX, par exemple. endmemo.com/unicode/unicodeconverter.php , alors vous verrez que L35 est HEX 6C 33 35 , et lorsque vous cochez un Table de code UNICODE / ASCII , vous verrez que 6c est en effet un Petite lettre latine L .


BTW: Cette sous-chaîne n'est pas "3 bit", il est de 3 caractères (au moins 24 bits)


Modifier merci de le pointer


4 Réponses :


0
votes

Utilisez le débogueur ou mettre un system.out.println code> à l'intérieur de la méthode, getred (clé de chaîne) code> Pour vérifier la valeur de Key.Substring ( 3,6) code>. L'exception que vous obtenez est parce que clé.substring (3,6) code> ne renvoie pas un numéro.

private int getRed(String key) {
    System.out.println(key.substring(3,6));
    return Integer.parseInt(key.substring(3,6));
}


0 commentaires

0
votes

comme je vois que vous essayez de " l 20" obtenez entier par integer.parseint (Key.Substring (3,6)); Comme je sais parsint () d'analyser les entiers (chiffres). Quel est le numéro "L"?) Je ne sais pas et je ne sais pas, c'est pourquoi il jette cette exception)


0 commentaires

1
votes

Comparez peut-être votre code à la mienne. J'ai à peu près la façon dont vous avez dit, avec seulement les moindres différences.

$ javac Num.java && java Num
Full key: 255142125179
Parsing: 142
Parsed: 142
$ cat Num.java
import java.util.Random;

public class Num {
    public static int getRed(String key) {
        System.out.printf("Parsing: %s\n", key.substring(3, 6));
        return Integer.parseInt(key.substring(3,6));
    }

    public static void main(String[] args) {
        String key = new String("");
        Random random = new Random();

        for (int index = 0; index < 12; ++index) {
            key = key + Integer.toString(random.nextInt(10));
        }

        System.out.printf("Full key: %s\n", key);
        int value = getRed(key);
        System.out.printf("Parsed: %d\n", value);
    }

}


0 commentaires

0
votes

Je viens de comprendre ce qui n'allait pas Je n'ai pas initialisé la clé de chaîne à "", donc il est fait défaut à NULL et la sous-chaîne 3-6 qu'il tentait de convertir a commencé avec un l

Une fois que j'ai résolu, l'erreur est partie

merci à tous ceux qui ont aidé


0 commentaires