Wie lässt sich ein String daraufhin überprüfen ob er eine Zahl wiedergibt?

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 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.