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?

28
demandé sur johnnyRose 2012-08-15 20:41:10

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.

61
répondu Tomasz Nurkiewicz 2015-03-06 07:35:42

Vous pouvez supprimer le , avant de l'analyser en un int:

int i = Integer.parseInt(myNumberString.replaceAll(",", ""));
18
répondu micha 2012-08-15 16:43:36

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
}
10
répondu anotherdave 2012-08-15 16:51:50

Une option serait de supprimer les virgules:

"265,858".replaceAll(",","");
2
répondu Tim Bender 2012-08-15 16:42:55

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)

2
répondu John Gardner 2012-08-15 16:46:39

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);
1
répondu SiB 2012-08-15 16:44:00

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)));
0
répondu SpiXel 2012-08-15 16:43:20