it-swarm.com.de

Wie parst man Zahlenstrings, die Kommas enthalten, in eine Ganzzahl in Java?

Ich bekomme NumberFormatException, wenn ich versuche, 265.858 mit Integer.parseInt() zu analysieren.

Gibt es eine Möglichkeit, es in eine Ganzzahl zu parsen?

29
vivek_jonam

Ist dieses Komma ein Dezimaltrennzeichen oder sind diese beiden Zahlen? Im ersten Fall müssen Sie Locale für NumberFormat class angeben, die Kommas als Dezimaltrennzeichen verwendet:

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

Dies führt zu 265.858. Wenn Sie jedoch ein US-Gebietsschema verwenden, erhalten Sie 265858:

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

Das liegt daran, dass sie in Frankreich das Komma als Dezimaltrennzeichen behandeln, während sie in den USA - als Tausendertrennzeichen (Grouping Separator) verwendet werden.

Wenn dies zwei Zahlen sind - String.split() -, und zwei separate Zeichenfolgen unabhängig voneinander analysieren.

64

Sie können den , entfernen, bevor Sie ihn in ein int analysieren:

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

Wenn es sich um eine Nummer handelt und Sie Trennzeichen entfernen möchten, gibt NumberFormat eine Nummer an Sie zurück. Stellen Sie nur sicher, dass Sie die korrekte Ländereinstellung verwenden, wenn Sie die getNumberInstance-Methode verwenden.

Beispielsweise tauschen einige Gebietsschemas das Komma und das Dezimalzeichen aus, was Sie vielleicht gewohnt sind.

Verwenden Sie dann einfach die intValue-Methode, um eine Ganzzahl zurückzugeben. Sie müssen das Ganze jedoch in einen try/catch-Block einschließen, um Parse-Ausnahmen zu berücksichtigen.

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

Eine Möglichkeit wäre, die Kommas zu entfernen:

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

Oder Sie können NumberFormat.parse verwenden, um nur die Ganzzahl festzulegen.

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

2
John Gardner

Das erste, was ich anklicke, wenn man davon ausgeht, dass dies eine einzige Zahl ist, ist ...

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

Versuche dies:

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

EDIT: Wenn Sie es auf die nächste Ganzzahl gerundet haben wollen: 

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