Frage Wie konvertiere ich einen String in einen Int in Java?


Wie kann ich ein String zu einem int in Java?

Meine Zeichenfolge enthält nur Zahlen und ich möchte die Nummer, die sie darstellt, zurückgeben.

Zum Beispiel, die Zeichenfolge gegeben "1234" Das Ergebnis sollte die Nummer sein 1234.


2514
2018-04-07 18:27


Ursprung


Antworten:


String myString = "1234";
int foo = Integer.parseInt(myString);

Siehe die Java Dokumentation für mehr Informationen.


3554
2018-04-07 18:29



Zum Beispiel gibt es zwei Möglichkeiten:

Integer x = Integer.valueOf(str);
// or
int y = Integer.parseInt(str);

Es gibt einen kleinen Unterschied zwischen diesen Methoden:

  • valueOf Gibt eine neue oder zwischengespeicherte Instanz von java.lang.Integer
  • parseInt gibt primitiv zurück int.

Das Gleiche gilt für alle Fälle: Short.valueOf/parseShort, Long.valueOf/parseLong, etc.


588
2018-04-07 18:36



Nun, ein sehr wichtiger Punkt, den es zu beachten gilt, ist, dass der Integer-Parser NumberFormatException wie in Javadoc.

int foo;
String StringThatCouldBeANumberOrNot = "26263Hello"; //will throw exception
String StringThatCouldBeANumberOrNot2 = "26263"; //will not throw exception
try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot);
} catch (NumberFormatException e) {
      //Will Throw exception!
      //do something! anything to handle the exception.
}

try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot2);
} catch (NumberFormatException e) {
      //No problem this time, but still it is good practice to care about exceptions.
      //Never trust user input :)
      //Do something! Anything to handle the exception.
}

Es ist wichtig, diese Ausnahme zu behandeln, wenn Sie versuchen, ganzzahlige Werte aus geteilten Argumenten zu erhalten oder etwas dynamisch zu analysieren.


215
2018-04-30 06:54



Mach es manuell:

public static int strToInt( String str ){
    int i = 0;
    int num = 0;
    boolean isNeg = false;

    //Check for negative sign; if it's there, set the isNeg flag
    if (str.charAt(0) == '-') {
        isNeg = true;
        i = 1;
    }

    //Process each character of the string;
    while( i < str.length()) {
        num *= 10;
        num += str.charAt(i++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++).
    }

    if (isNeg)
        num = -num;
    return num;
}

72
2017-09-11 02:08



Zurzeit mache ich eine Aufgabe für das College, wo ich bestimmte Ausdrücke wie die oben genannten nicht verwenden kann, und indem ich auf die ASCII-Tabelle schaue, habe ich es geschafft. Es ist ein viel komplexerer Code, aber es könnte anderen helfen, die eingeschränkt sind wie ich.

Das erste, was zu tun ist, erhält die Eingabe, in diesem Fall eine Ziffernfolge; Ich werde es anrufen String number, und in diesem Fall werde ich es mit der Zahl 12 deshalb beispielhaft veranschaulichen String number = "12";

Eine weitere Einschränkung war die Tatsache, dass ich Wiederholungszyklen nicht verwenden konnte, daher a for Zyklus (der perfekt gewesen wäre) kann auch nicht verwendet werden. Das begrenzt uns ein bisschen, aber das ist das Ziel. Da brauchte ich nur zwei Ziffern (die letzten zwei Ziffern), eine einfache charAtIch habe es gelöst:

 // Obtaining the integer values of the char 1 and 2 in ASCII
 int semilastdigitASCII = number.charAt(number.length()-2);
 int lastdigitASCII = number.charAt(number.length()-1);

Wenn wir die Codes haben, müssen wir nur auf den Tisch schauen und die notwendigen Anpassungen vornehmen:

 double semilastdigit = semilastdigitASCII - 48;  //A quick look, and -48 is the key
 double lastdigit = lastdigitASCII - 48;

Nun, warum verdoppeln? Nun, wegen eines wirklich "komischen" Schrittes. Derzeit haben wir zwei Doppelgänger, 1 und 2, aber wir müssen es in 12 verwandeln, es gibt keine mathematische Operation, die wir machen können.

Wir teilen die letzte (lastdigit) durch 10 in der Mode 2/10 = 0.2 (daher warum doppelt) wie folgt:

 lastdigit = lastdigit/10;

Dies ist nur mit Zahlen zu spielen. Wir haben die letzte Ziffer zu einer Dezimalzahl gemacht. Aber jetzt, schau, was passiert:

 double jointdigits = semilastdigit + lastdigit; // 1.0 + 0.2 = 1.2

Ohne auf die Mathematik einzugehen, isolieren wir einfach die Ziffern einer Zahl. Sie sehen, da wir nur 0-9 betrachten, ist das Teilen durch ein Vielfaches von 10 wie das Erstellen einer "Box", in der Sie es speichern (denken Sie zurück, als Ihr Lehrer der ersten Klasse Ihnen erklärte, was eine Einheit und ein Hundert waren). Damit:

 int finalnumber = (int) (jointdigits*10); // Be sure to use parentheses "()"

Und da gehst du. Sie haben eine Zeichenfolge aus Ziffern (in diesem Fall zwei Ziffern) in eine Ganzzahl umgewandelt, die aus diesen zwei Ziffern besteht, unter Berücksichtigung der folgenden Einschränkungen:

  • Keine sich wiederholenden Zyklen
  • Keine "magischen" Ausdrücke wie parseInt

38
2018-03-20 23:51



Eine alternative Lösung ist zu verwenden Apache Commons ' AnzahlUtils:

int num = NumberUtils.toInt("1234");

Das Apache-Dienstprogramm ist nett, denn wenn die Zeichenfolge ein ungültiges Zahlenformat ist, wird immer 0 zurückgegeben. Daher ersparen Sie sich den try catch-Block.

Apache NumberUtils API Version 3.4


33
2017-08-27 12:07



Integer.decode

Sie können auch verwenden public static Integer decode(String nm) throws NumberFormatException.

Es funktioniert auch für die Basis 8 und 16:

// base 10
Integer.parseInt("12");     // 12 - int
Integer.valueOf("12");      // 12 - Integer
Integer.decode("12");       // 12 - Integer
// base 8
// 10 (0,1,...,7,10,11,12)
Integer.parseInt("12", 8);  // 10 - int
Integer.valueOf("12", 8);   // 10 - Integer
Integer.decode("012");      // 10 - Integer
// base 16
// 18 (0,1,...,F,10,11,12)
Integer.parseInt("12",16);  // 18 - int
Integer.valueOf("12",16);   // 18 - Integer
Integer.decode("#12");      // 18 - Integer
Integer.decode("0x12");     // 18 - Integer
Integer.decode("0X12");     // 18 - Integer
// base 2
Integer.parseInt("11",2);   // 3 - int
Integer.valueOf("11",2);    // 3 - Integer

Wenn du willst int Anstatt von Integer Sie können verwenden:

  1. Unboxing:

    int val = Integer.decode("12"); 
    
  2. intValue():

    Integer.decode("12").intValue();
    

27
2018-03-07 00:42



Wann immer es die geringste Möglichkeit gibt, dass der angegebene String keine Integer enthält, müssen Sie mit diesem Sonderfall umgehen. Leider die Standard-Java-Methoden Integer::parseInt und Integer::valueOf Werfen Sie einen NumberFormatException um diesen speziellen Fall zu signalisieren. Daher müssen Sie Ausnahmen für die Ablaufsteuerung verwenden, was im Allgemeinen als schlechter Codierungsstil gilt.

Meines Erachtens sollte dieser Sonderfall behandelt werden, indem ein Optional<Integer>. Da Java keine solche Methode anbietet, verwende ich den folgenden Wrapper:

private Optional<Integer> tryParseInteger(String string) {
    try {
        return Optional.of(Integer.valueOf(string));
    } catch (NumberFormatException e) {
        return Optional.empty();
    }
}

Verwendung:

// prints 1234
System.out.println(tryParseInteger("1234").orElse(-1));
// prints -1
System.out.println(tryParseInteger("foobar").orElse(-1));

Während dies intern noch Ausnahmen für die Ablaufsteuerung verwendet, wird der Verwendungscode sehr sauber.


20
2018-04-04 03:13



Konvertieren einer Zeichenfolge in einen Int ist komplizierter als nur eine Zahl konvertieren. Sie haben über die folgenden Probleme nachgedacht:

  • Enthält die Zeichenfolge nur Zahlen 0-9?
  • Was ist los mit - / + vor oder nach der Saite? Ist das möglich (Bezug auf Buchungsnummern)?
  • Was ist los mit MAX _- / MIN_INFINITY? Was passiert, wenn die Zeichenfolge 99999999999999999999 ist? Kann die Maschine diese Zeichenfolge als int behandeln?

19
2017-10-20 13:18



Wir können das benutzen parseInt(String str) Methode der Integer Wrapper-Klasse zum Konvertieren eines Zeichenfolgenwerts in einen Ganzzahlwert.

Beispielsweise:

String strValue = "12345";
Integer intValue = Integer.parseInt(strVal);

Das Integer Klasse bietet auch die valueOf(String str) Methode:

String strValue = "12345";
Integer intValue = Integer.valueOf(strValue);

Wir können auch verwenden toInt(String strValue) von Utility-Klasse NumberUtils für die Umwandlung:

String strValue = "12345";
Integer intValue = NumberUtils.toInt(strValue);

18
2017-10-20 09:51