Dies geschieht in der Regel mit einer einfachen benutzerdefinierten Funktion (z. B. der Funktion "isNumeric" von Roll-your-own).
Etwa so:
public static boolean isNumeric(String str) {
try {
Double.parseDouble(str);
return true;
} catch(NumberFormatException e){
return false;
}
}
Wenn Sie diese Funktion jedoch häufig aufrufen und damit rechnen, dass viele der Überprüfungen fehlschlagen, weil es sich nicht um eine Zahl handelt, ist die Leistung dieses Mechanismus nicht sehr hoch, da Sie darauf angewiesen sind, dass bei jedem Fehler eine Ausnahme ausgelöst wird, was eine ziemlich teure Operation ist.
Eine andere Möglichkeit ist die Verwendung eines regulären Ausdrucks, um zu prüfen, ob es sich um eine Zahl handelt:
public static boolean isNumeric(String str) {
return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal.
}
Seien Sie jedoch vorsichtig mit dem obigen RegEx-Mechanismus, da er fehlschlägt, wenn Sie nicht-arabische Ziffern verwenden (d.h. andere Ziffern als 0 bis 9). Das liegt daran, dass die " \d "Teil des RegEx-Teils passt nur auf [0-9] und ist in der Tat international nicht numerisch. (Dank an OregonGhost für den Hinweis darauf!)
Eine weitere Alternative ist die Verwendung des in Java eingebauten java.text.NumberFormat-Objekts, um festzustellen, ob nach dem Parsen der Zeichenkette die Parserposition am Ende der Zeichenkette liegt. Ist dies der Fall, können wir davon ausgehen, dass die gesamte Zeichenkette numerisch ist:
public static boolean isNumeric(String str) {
ParsePosition pos = new ParsePosition(0);
NumberFormat.getInstance().parse(str, pos);
return str.length() == pos.getIndex();
}
42 Stimmen
Alle Lösungen, die mit regulären Ausdrücken vorgeschlagen werden, funktionieren nicht für hexadezimale Zahlen.
0 Stimmen
Und die Übergabe einer Null-Zeichenkette in der Funktion matches(...) führt zur Ausnahme NullPointer.
0 Stimmen
In der Antwort von Max Malysh finden Sie eine prägnante Java 8-Lösung ohne Bibliotheken von Drittanbietern.
0 Stimmen
@HiteshSahu Null-Strings scheinen in der neuesten Version (einschließlich Java 6.x und 7.x) ordnungsgemäß behandelt zu werden.
0 Stimmen
Alle vorgeschlagenen Lösungen zur Verwendung
Integer.parseInt()
nicht in der Lage, Handynummern zu analysieren, dieNumberFormatException
.0 Stimmen
@OscarCastiblanco Alle Zeichenketten sind Zahlen in einer bestimmten Basis.