Java-Bibliothek, um zu prüfen, ob ein String eine Zahl * ohne * Ausnahmen enthält

8

Ich suche nach einer Methode, die einen booleschen Wert zurückgibt, wenn der übergebene String eine gültige Zahl ist (z. B. "123.55e-9", "-333.556"). Ich will nicht nur tun:

%Vor%

Offensichtlich sollte die Funktion eine Zustandsmaschine (DFA) verwenden, um die Zeichenfolge zu analysieren, um sicherzustellen, dass ungültige Beispiele sie nicht täuschen (z.B. "-21,22.22.2", "33-2"). Weißt du, ob eine solche Bibliothek existiert? Ich möchte es nicht wirklich selbst schreiben, da es so ein offensichtliches Problem ist, dass ich sicher bin, dass ich das Rad neu erfinden werde.

Danke,

Nick

    
tddmonkey 22.07.2009, 07:27
quelle

5 Antworten

6

Ich würde es vermeiden, diese Methode neu zu erfinden und mit Apache Commons zu gehen. Wenn Sie Spring, Struts oder viele andere häufig verwendete Java-Bibliotheken verwenden, enthalten sie oft Apache-Commons. Sie werden die commons-lang.jar Datei wollen. Hier ist die Methode in NumberUtils möchten Sie:

%Vor%     
Brian Hart 22.07.2009, 16:05
quelle
3

Verwenden Sie eine regexp

    
dfa 22.07.2009 07:33
quelle
2

Hier ist eine regexp-basierte Utility-Funktion in Ordnung (die nicht in die "regexp" passt, während sie lesbar bleibt):

%Vor%     
Nicolas Simonet 22.07.2009 08:48
quelle
2

Ja, ein regulärer Ausdruck sollte den Trick machen. Ich kenne nur .Net Regexp, aber alle Regex-Sprachen sind ziemlich ähnlich, so dass Sie beginnen sollten. Ich habe es nicht getestet, daher solltest du es vielleicht ein wenig mit der Java-Regex-Klasse umgehen.

%Vor%

Einige der Regex-Steuersyntax:
? - Optionales Element
| - ODER-Operator Grundsätzlich erlaubte ich Zahlen mit oder ohne Kommas, wenn sie richtig formatiert waren.
[] - Menge erlaubter Zeichen
{,} - Minimales Maximum von Element
* - Beliebige Anzahl von Elementen, 0 bis unendlich | + - Mindestens ein Element, 1 bis unendlich
\ - Escape Charakter
. - Irgendein Charakter (Deshalb warum es entkam)

    
Spencer Ruport 22.07.2009 07:40
quelle
2

Der exakte reguläre Ausdruck wird in den Javadocs für Double.valueOf(String) .

  

Um zu vermeiden, dass diese Methode für eine ungültige Zeichenfolge aufgerufen wird und ein NumberFormatException ausgelöst wird, kann der folgende reguläre Ausdruck verwendet werden, um die Eingabezeichenfolge zu überprüfen:

%Vor%
    
Michael Myers 22.07.2009 16:13
quelle