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+. Beides ist geklammert und wird von
{1} gefolgt. Punkt und nachfolgende Ziffern müssen
also genau einmal erscheinen.
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.