Gibt es in Java eine Möglichkeit herauszufinden, ob das erste Zeichen einer Zeichenfolge eine Zahl ist?
Ein Weg ist
string.startsWith("1")
und mache das oben genannte bis 9, aber das scheint sehr ineffizient zu sein.
Gibt es in Java eine Möglichkeit herauszufinden, ob das erste Zeichen einer Zeichenfolge eine Zahl ist?
Ein Weg ist
string.startsWith("1")
und mache das oben genannte bis 9, aber das scheint sehr ineffizient zu sein.
Antworten:
Character.isDigit(string.charAt(0))
Beachten Sie, dass dies jede Unicode-Ziffer zulässt , nicht nur 0-9. Vielleicht bevorzugen Sie:
char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');
Oder die langsameren Regex-Lösungen:
s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")
Bei jeder dieser Methoden müssen Sie jedoch zuerst sicherstellen, dass die Zeichenfolge nicht leer ist. Wenn es ist, charAt(0)
und substring(0, 1)
wird ein werfen StringIndexOutOfBoundsException
. startsWith
hat dieses Problem nicht.
Um die gesamte Bedingung einzeilig zu machen und Längenprüfungen zu vermeiden, können Sie die regulären Ausdrücke wie folgt ändern:
s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")
Wenn die Bedingung in Ihrem Programm nicht in einer engen Schleife angezeigt wird, ist es unwahrscheinlich, dass der geringe Leistungseinbruch bei der Verwendung regulärer Ausdrücke erkennbar ist.
((null!=s) && Character.isDigit(s.charAt(0)) )
) oder Tricks wieCharacter.isDigit((s?s:"X").charAt(0))
Reguläre Ausdrücke sind ein sehr starkes, aber teures Werkzeug. Es ist gültig, sie zu verwenden, um zu überprüfen, ob das erste Zeichen eine Ziffer ist, aber es ist nicht so elegant :) Ich bevorzuge diesen Weg:
public boolean isLeadingDigit(final String value){
final char c = value.charAt(0);
return (c >= '0' && c <= '9');
}
function
ist nicht Java. 2) Dies erlaubt nur arabische Ziffern, nicht chinesische, indische usw. Das ist vielleicht das, was Sie bevorzugen, aber es ist nicht in der Frage angegeben. 3) Diese genaue Lösung habe ich bereits vor vier Jahren in meiner Antwort behandelt.
regular expression starts with number->'^[0-9]'
Pattern pattern = Pattern.compile('^[0-9]');
Matcher matcher = pattern.matcher(String);
if(matcher.find()){
System.out.println("true");
}
{1,1}
Suffix nicht, was bedeutet, dass "das vorhergehende Muster zwischen 1 und 1 Mal erscheinen muss". Dies bedeutet genau das gleiche wie das Muster für sich.
Ich bin gerade auf diese Frage gestoßen und habe darüber nachgedacht, mit einer Lösung beizutragen, die keinen regulären Ausdruck verwendet.
In meinem Fall verwende ich eine Hilfsmethode:
public boolean notNumber(String input){
boolean notNumber = false;
try {
// must not start with a number
@SuppressWarnings("unused")
double checker = Double.valueOf(input.substring(0,1));
}
catch (Exception e) {
notNumber = true;
}
return notNumber;
}
Wahrscheinlich ein Overkill, aber ich versuche, Regex zu vermeiden, wann immer ich kann.