NumberFormatException erreur (parseInt)
Nous l'espérons, un très simple requête, mais il m'a laissé me gratter la tête.
J'ai une chaîne de caractères, qui est juste un simple entier, et je suis en train de l'obtenir alors que entier comme un int. Présent sur le visage de celui-ci ne devrait pas être un problème.
//this is how I create the string (it's the playload from a UDP datagram packet,
//thought I don't think the origins hugely important - it's juts a test run so the
//stringMessage is always 1 (created by a seperate client process)
...
recvSoc.receive(pac);
String stringMessage = new String(pac.getData());
port = pac.getPort();
System.out.println("RECEIVED: " + stringMessage + " on port: " + port);
processMessage(stringMessage);
...
//Then in processMessage
public void processMessage(String data) {
int message;
message = Integer.parseInt(data);
...
Cela se bloque toujours avec un NumberFormatException erreur. Je ne peux pas pour la vie de me comprendre ce qui cause cela, toutes les idées grandement apprécié. Je n'ai pas codé beaucoup en Java (récemment) donc peut-être simplement oublié quelque chose d'essentiel ou ce n'est pas.
Exception in thread "main" java.lang.NumberFormatException: For input string: "1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:481)
at java.lang.Integer.parseInt(Integer.java:514)
at udp.UDPServer.processMessage(UDPServer.java:85)
at udp.UDPServer.run(UDPServer.java:52)
at udp.UDPServer.main(UDPServer.java:156)
d'imprimer votre chaîne de caractère par caractère et de voir si quelque chose est drôle, il y
OriginalL'auteur Alex | 2011-03-10
Vous devez vous connecter pour publier un commentaire.
Noter que
DatagramPackate.getData()
renvoie la tampon entier!Les données que vous avez reçu est seulement une partie de celui-ci:
Afin de convertir les données dans un
String
vous devez utiliser ce constructeur:Remarque que je spécifie l'encodage UTF-8, ici, que de ne pas spécifier un encodage en résulterait la plate-forme de codage par défaut pour être utilisé, ce qui n'est généralement pas ce que vous voulez.
OriginalL'auteur Joachim Sauer
Si la chaîne est vraiment
1
, l'exception ne peut pas se produire. Donc je dirais que la chaîne n'est pas réellement1
.faire un
data.toCharArray()
et imprimer chaque caractère du code (cast àint
). Il se peut qu'il y est un personnage caché avant de le chiffre, par exemple. (edit: il semble iluxa mentionné cette option dans un commentaire alors que j'écrivais la réponse)Essayer
data = data.trim()
avant de passer àparseInt(..)
vous ne devez pas avoir de zéros après le 1. Voir mise à jour.
OriginalL'auteur Bozho