Ich habe eine einfache Frage in Java: Wie kann ich ein String
, das mit Long.toString()
erhalten wurde, in long
konvertieren?
Verwenden Sie Long.parseLong()
Long.parseLong("0", 10) // returns 0L
Long.parseLong("473", 10) // returns 473L
Long.parseLong("-0", 10) // returns 0L
Long.parseLong("-FF", 16) // returns -255L
Long.parseLong("1100110", 2) // returns 102L
Long.parseLong("99", 8) // throws a NumberFormatException
Long.parseLong("Hazelnut", 10) // throws a NumberFormatException
Long.parseLong("Hazelnut", 36) // returns 1356099454469L
Long.parseLong("999") // returns 999L
Um einen String in einen Long (Objekt) zu konvertieren, verwenden Sie Long.valueOf(String s).longValue();
Siehe link
public class StringToLong {
public static void main (String[] args) {
// String s = "fred"; // do this if you want an exception
String s = "100";
try {
long l = Long.parseLong(s);
System.out.println("long l = " + l);
} catch (NumberFormatException nfe) {
System.out.println("NumberFormatException: " + nfe.getMessage());
}
}
}
Long.valueOf (String s) - Offensichtlich muss sorgfältig gegen Nicht-Zahlen geschützt werden, wenn dies in Ihrem Code möglich ist.
Der beste Ansatz ist Long.valueOf(str)
, da er sich auf Long.valueOf(long)
stützt, der einen internen Cache verwendet, wodurch er effizienter wird, da die zwischengespeicherten Instanzen von Long
bei Bedarf wiederverwendet werden -128
bis 127
enthalten.
Gibt eine
Long
-Instanz zurück, die den angegebenen langen Wert darstellt. Wenn keine neue Long-Instanz erforderlich ist, sollte diese Methode im Allgemeinen dem KonstruktorLong(long)
vorgezogen werden, da diese Methode durch Zwischenspeichern häufig angeforderter Werte wahrscheinlich zu einer erheblich besseren Leistung in Bezug auf Platz und Zeit führt. Beachten Sie, dass diese Methode im Gegensatz zur entsprechenden Methode in der Integer-Klasse nicht erforderlich ist, um Werte innerhalb eines bestimmten Bereichs zwischenzuspeichern.
Dank Auto-Unboxing , das es ermöglicht, die Instanz einer Wrapper-Klasse in den entsprechenden primitiven Typ zu konvertieren, wäre der Code dann:
long val = Long.valueOf(str);
Bitte beachten Sie, dass der vorherige Code immer noch ein NumberFormatException
auslösen kann, wenn das bereitgestellte String
nicht mit einem signierten long
übereinstimmt.
Generell ist es empfehlenswert, die static
Factory-Methode valueOf(str)
einer Wrapper-Klasse wie Integer
, Boolean
, Long
, ... zu verwenden, da die meisten von ihnen wiederverwendet werden Fälle, in denen es möglich ist, sie hinsichtlich des Speicherbedarfs potenziell effizienter zu machen als die entsprechenden parse
Methoden oder Konstruktoren.
Auszug aus Effektives Java Item 1
geschrieben von Joshua Bloch :
Sie können häufig vermeiden, unnötige Objekte zu erstellen, indem Sie statische Factory-Methoden (Element 1) verwenden, anstatt Konstruktoren für unveränderliche Klassen, die beides bereitstellen. Beispielsweise ist die statische Factory-Methode
Boolean.valueOf(String)
dem KonstruktorBoolean(String)
fast immer vorzuziehen. Der Konstruktor erstellt jedes Mal, wenn er aufgerufen wird, ein neues Objekt, während die statische Factory-Methode dies niemals erfordert und in der Praxis nicht erforderlich ist.
Für diejenigen, die zu Kotlin gewechselt haben, nutzen Sie einfachstring.toLong()
Das wird Long.parseLong(string)
unter der Haube aufrufen
Es gibt eine Möglichkeit, einen String in eine Ganzzahl umzuwandeln:
1)
long l = Long.parseLong("200");
2)
String numberAsString = "1234";
long number = Long.valueOf(numberAsString).longValue();
3)
String numberAsString = "1234";
Long longObject = new Long(numberAsString);
long number = longObject.longValue();
Wir können verkürzen auf:
String numberAsString = "1234";
long number = new Long(numberAsString).longValue();
oder einfach
long number = new Long("1234").longValue();
4) Verwendung des Decemal-Formats:
String numberAsString = "1234";
DecimalFormat decimalFormat = new DecimalFormat("#");
try {
long number = decimalFormat.parse(numberAsString).longValue();
System.out.println("The number is: " + number);
} catch (ParseException e) {
System.out.println(numberAsString + " is not a valid number.");
}