Je fais un exercice simple à partir d'un livre et je suis un peu confus avec le fonctionnement de la fonction java parseInt. J'ai lu une ligne d'un fichier d'entrée, utilisé le StringTokenizer pour le diviser et maintenant je veux analyser chaque partie comme un entier.Pourquoi Integer.parseInt renvoie NumberFormatException sur une entrée qui semble valide?
J'ai vérifié dans la fenêtre de surveillance que l'entrée de la fonction parseInt est bien une chaîne qui semble être un entier valide (par exemple "35"). Cependant, lorsque je tente d'utiliser la fonction str.charAt
sur ma str
variable qui contient la valeur « 35 », je reçois des résultats étranges:
str.charAt(0) == ""
str.charAt(1) == "3"
str.charAt(2) == ""
str.charAt(3) == "5"
Cela semble être un problème probablement lié en quelque sorte à l'encodage, donc je l'ai essayé pour le fixer à l'aide de cette façon de lire le fichier:
InputStreamReader reader = new InputStreamReader(new FileInputStream(inputfile), "UTF-8");
(j'ai explicitement enregistré le fichier en utilisant le codage UTF-8 dans mon éditeur), mais cela n'a pas aidé. Des idées quel pourrait être le problème et comment le réparer?
EDIT: Mon échantillon
InputStreamReader reader = new InputStreamReader(new FileInputStream(inputfile), "UTF-8");
BufferedReader bfreader = new BufferedReader(reader);
line = bfreader.readLine();
while (line !=null)
{
String[] valueStrings = line.split(" ");
String hole = valueStrings[0];
int[] values = new int[4];
for (int i = 0; i <values.length; i++){
String nr = valueStrings[i+1].trim();
values [i] = Integer.parseInt(nr);
}
// it breaks at the parseInt here, the rest is not even executed...
}
Vous avez raison, je l'ai vérifié dans l'éditeur hexadécimal et chaque deuxième caractère est zéro. Quoi qu'il en soit, comment puis-je lire un tel fichier? –
Si vous définissez le jeu de caractères sur UTF-16, vous devez le lire ou enregistrer le fichier sous la forme UTF-8 ou par défaut du système. –
Le fichier est lu correctement, le problème est que parseInt échoue quand il essaie d'analyser la chaîne. Y a-t-il un moyen de régler cela? –