Mit Hilfe von regulären Ausdrücken lassen sich
Strings erkennen, die Zahlen wiedergeben oder enthalten.
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 drei reguläre Ausdrücke an, die ganze Zahlen,
Gleitkommazahlen oder aber beide identifizieren.
Im einfachsten Fall wird zur Identifikation einer Zahl einfach nach einer
einstelligen Ziffer gesucht. Sie kann durch das Sonderzeichen \d 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. Dieser 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 ZahlenErkennen {
public static void main(String[] args) {
String s = "";
// Testet nur auf ganzzahlige Werte
if (s.matches("\\d+"))
System.out.println("ganze Zahl!");
else
System.out.println("keine ganze Zahl!");
// Testet auf Dezimalzahlen
if (s.matches("\\d+([.]{1}\\d+){1}"))
System.out.println("Dezimalzahl!");
else
System.out.println("keine Dezimalzahl!");
// Testet auf Dezimal- und ganze Zahlen
if (s.matches("\\d+([.]{1}\\d+)?"))
System.out.println("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, die zwingend von
einer Kombination aus einem Punkt und einer oder mehreren nachfolgenden Ziffern
gefolgt wird.
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 durch ein nachgestelltes Fragezeichen.