Comment analyser une chaîne de nombres contenant des virgules dans un entier en java?
Je reçois NumberFormatException
quand j'essaie d'analyser 265,858 avec Integer.parseInt()
.
Est-il possible de l'analyser en un entier?
7 réponses
Cette virgule est-elle un séparateur décimal ou ces deux nombres? Dans le premier cas, vous devez fournir Locale
pour NumberFormat
la classe qui utilise la virgule comme séparateur décimal:
NumberFormat.getNumberInstance(Locale.FRANCE).parse("265,858")
Il en résulte 265.858
. Mais en utilisant US locale, vous obtiendrez 265858
:
NumberFormat.getNumberInstance(java.util.Locale.US).parse("265,858")
C'est parce qu'en France, ils traitent la virgule comme séparateur décimal alors qu'aux États - Unis-comme séparateur de regroupement (mille).
Si ce sont deux nombres - String.split()
eux et analysez deux chaînes séparées indépendamment.
Vous pouvez supprimer le ,
avant de l'analyser en un int:
int i = Integer.parseInt(myNumberString.replaceAll(",", ""));
S'il s'agit d'un nombre et que vous souhaitez supprimer les séparateurs, NumberFormat
vous renverra un nombre. Assurez-vous simplement d'utiliser les paramètres régionaux corrects lorsque vous utilisez la méthode getNumberInstance
.
Par exemple, certains paramètres régionaux échangent la virgule et le point décimal à ce à quoi vous pouvez être habitué.
Ensuite, utilisez simplement la méthode intValue
pour retourner un entier. Vous devrez cependant envelopper le tout dans un bloc try/catch, pour tenir compte des Exceptions D'analyse.
try {
NumberFormat ukFormat = NumberFormat.getNumberInstance(Locale.UK);
ukFormat.parse("265,858").intValue();
} catch(ParseException e) {
//Handle exception
}
Une option serait de supprimer les virgules:
"265,858".replaceAll(",","");
Ou vous pouvez utiliser NumberFormat.parse
, en le définissant comme entier uniquement.
Http://docs.oracle.com/javase/1.4.2/docs/api/java/text/NumberFormat.html#parse(java.lang.String)
La première chose qui me clique, en supposant que c'est un seul nombre, est...
String number = "265,858";
number.replaceAll(",","");
Integer num = Integer.parseInt(number);
Essayez ceci:
String x = "265,858 ";
x = x.split(",")[0];
System.out.println(Integer.parseInt(x));
Modifier : si vous voulez l'arrondir à L'entier le plus proche:
String x = "265,858 ";
x = x.replaceAll(",",".");
System.out.println(Math.round(Double.parseDouble(x)));