Wie lässt sich ein String daraufhin überprüfen ob er eine Zahl wiedergibt?
Unter regulären Ausdrücken versteht man
Strings, die ein spezielles Suchmuster vorgeben und in
der Lage sind, andere Strings auf das Vorkommen des
gesuchten Elementes hin zu überprüfen.
Für die Arbeit mit regulären Ausdrücken
existiert in der Klasse java.lang.String
die Methode matches()
, die auf dem zu
durchsuchenden String aufgerufen wird und als Parameter
den regulären Ausdruck übergeben bekommt.
Das Beispiel führt mehrere reguläre
Ausdrücke an, die positive oder negative ganze
Zahlen, Gleitkommazahlen oder aber beide identifizieren.
Im einfachsten Fall wird zur Identifikation einer Zahl
nach einer einstelligen Ziffer gesucht. Sie kann durch
das Sonderzeichen \d
(für digit)
entdeckt werden. Hierbei muss jedoch beachtet werden,
dass der Backslash '\' durch einen
vorangestellten weiteren Backslash maskiert wird, da er
in regulären Ausdrücken noch eine
Sonderfunktion besitzt.
Möchte man negative
Zahlen erkennen, so muss an den Anfang des Ausdrucks
noch ein Minuszeichen gesetzt werden. Die
Identifizierung von Zahlen, die sowohl positiv als auch
negativ sein können erfolgt durch Voranstellen von
-?
. Das Fragezeichen bedeutet, dass das
vorangegangene Zeichen einmal oder keinmal vorkommen
darf.
Der Ausdruck erkennt jedoch nur eine einzelne Ziffer und versagt bei mehrstelligen Zahlen. Um diese zu erkennen, muss ein '+' nachgestellt werden. Es bedeutet, dass der vorangehende Ausdruck mindestens einmal oder mehrfach vorkommt.
public class Zahlentest {
public static void main(String[] args) {
String s = "5.4";
// Testet nur auf positive ganzzahlige Werte
if (s.matches("\\d+"))
System.out.println("positive ganze Zahl!");
// Testet nur auf negative ganzzahlige Werte
else if(s.matches("-\\d+"))
System.out.println("negative ganze Zahl!");
// Testet nur auf positive oder negative ganzzahlige Werte
if(s.matches("-?\\d+"))
System.out.println("positive oder negative ganze Zahl!");
else
System.out.println("keine ganze Zahl!");
// Testet auf positive oder negative Dezimalzahlen
if (s.matches("-?\\d+([.]{1}\\d+){1}"))
System.out.println("positive oder negative Dezimalzahl!");
else
System.out.println("keine Dezimalzahl!");
// Testet auf positive oder negative Dezimal- und ganze Zahlen
if (s.matches("-?\\d+([.]{1}\\d+)?"))
System.out.println("positive oder negative Dezimalzahl oder ganze Zahl!");
else
System.out.println("weder Dezimal- noch ganze Zahl!");
}
}
Deutlich komplizierter wird es, wenn nach einer
Gleitkommazahl gesucht wird. Ihr Charakteristikum
besteht darin, dass sie als Dezimaltrennzeichen einen
Punkt enthält, der jedoch weder am Anfang, noch am
Schluss stehen darf. Dem Punkt müssen also noch
eine bis mehrere Ziffern folgen. Auch mehrere Punkte im
String müssen ausgeschlossen werden.
Im
Zentrum der Regex findet sich der Teil-String [.]{1}
.
Er legt fest, dass ein Punkt genau einmal vorkommen
muss. Er wird gefolgt von dem bereits bekannten Ausdruck
\\d+
für die Folgeziffern. Beides ist
gemeinsam geklammert und wird von {1}
gefolgt. Punkt und nachfolgende Ziffern müssen also
genau einmal erscheinen, um den Anforderungen für
eine Dezimalzahl zu entsprechen.
Vor der runden
Klammer findet sich wiederum der Ausdruck zur Erkennung
mehrerer Ziffern. Gesucht wird somit nach einer oder
mehreren Ziffern, der oder denen zwingend eine
Kombination aus einem Punkt und einer oder mehreren
nachfolgenden Ziffern folgt.
Um wahlweise auf eine Dezimalzahl
oder eine ganze Zahl zu prüfen, muss dem Block mit dem
Punkt lediglich mitgeteilt werden, dass er keinmal oder
einmal vorkommen darf. Dies geschieht wiederum durch ein
nachgestelltes Fragezeichen.
Will man auch auf das Komma (',') als
Dezimaltrenner prüfen, wie es etwa im deutschen
Raum gängig ist, wird der Ausdruck [.]
durch [.|,]
ersetzt. Das Pipe-Zeichen ('|')
steht hier für ein boolsches OR
und
prüft somit, ob an der angegebenen Stelle entweder ein Punkt
oder ein Komma vorhanden ist.
Für den letzen Ausdruck ergibt sich somit
-?\\d+([.|,]{1}\\d+)?
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.