web-dev-qa-db-fra.com

Comment analyser une chaîne numérique contenant des virgules dans un entier en java?

Je reçois NumberFormatException lorsque j'essaie d'analyser 265 858 avec Integer.parseInt().

Est-il possible de l’analyser en un entier?

29
vivek_jonam

Cette virgule est-elle un séparateur décimal ou s'agit-il de deux nombres? Dans le premier cas, vous devez fournir Locale à NumberFormat class qui utilise une virgule comme séparateur décimal:

NumberFormat.getNumberInstance(Locale.FRANCE).parse("265,858")

Cela se traduit par 265.858. Mais en utilisant les paramètres régionaux américains, vous obtiendrez 265858:

NumberFormat.getNumberInstance(Java.util.Locale.US).parse("265,858")

En effet, en France, ils traitent les virgules comme séparateur décimal, tandis qu'aux États-Unis, ils le séparent (en milliers).

Si ce sont deux nombres - String.split() les et analyser séparément deux chaînes.

64
Tomasz Nurkiewicz

Vous pouvez supprimer le , avant de l’analyser dans un int:

int i = Integer.parseInt(myNumberString.replaceAll(",", ""));
18
micha

S'il s'agit d'un numéro et que vous souhaitez supprimer des 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 remplacent la virgule et le point décimal par ceux auxquels vous êtes peut-être habitué.

Ensuite, utilisez simplement la méthode intValue pour renvoyer un entier. Vous devrez toutefois encapsuler le tout dans un bloc try/catch pour prendre en compte les exceptions d'analyse.

try {
    NumberFormat ukFormat = NumberFormat.getNumberInstance(Locale.UK);
    ukFormat.parse("265,858").intValue();
} catch(ParseException e) {
    //Handle exception
}
10
anotherdave

Une option serait de supprimer les virgules:

"265,858".replaceAll(",","");
3
Tim Bender

Vous pouvez également utiliser NumberFormat.parse, en le définissant comme un entier uniquement.

http://docs.Oracle.com/javase/1.4.2/docs/api/Java/text/NumberFormat.html#parse(Java.lang.String )

2
John Gardner

La première chose qui clique pour moi, en supposant que ce soit un nombre unique, est ...

String number = "265,858";
number.replaceAll(",","");
Integer num = Integer.parseInt(number);
1
SiB

Essaye ça:

String x = "265,858 ";
    x = x.split(",")[0];
    System.out.println(Integer.parseInt(x));

EDIT: Si vous voulez arrondir à l'entier le plus proche: 

    String x = "265,858 ";
    x = x.replaceAll(",",".");
    System.out.println(Math.round(Double.parseDouble(x)));
0
SpiXel