In Java c'è un modo per scoprire se il primo carattere di una stringa è un numero?
Un modo è
string.startsWith("1")
e fai quanto sopra fino alle 9, ma sembra molto inefficiente.
In Java c'è un modo per scoprire se il primo carattere di una stringa è un numero?
Un modo è
string.startsWith("1")
e fai quanto sopra fino alle 9, ma sembra molto inefficiente.
Risposte:
Character.isDigit(string.charAt(0))
Nota che questo consentirà qualsiasi cifra Unicode , non solo 0-9. Potresti preferire:
char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');
O le soluzioni regex più lente:
s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")
Tuttavia, con uno di questi metodi, devi prima assicurarti che la stringa non sia vuota. Se lo è, charAt(0)e substring(0, 1)lancerà un file StringIndexOutOfBoundsException. startsWithnon ha questo problema.
Per rendere l'intera condizione una riga ed evitare controlli di lunghezza, puoi modificare le espressioni regolari come segue:
s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")
Se la condizione non compare in un ciclo ristretto nel programma, è probabile che il piccolo calo di prestazioni per l'utilizzo di espressioni regolari non sia evidente.
((null!=s) && Character.isDigit(s.charAt(0)) )) o utilizzare trucchi comeCharacter.isDigit((s?s:"X").charAt(0))
Le espressioni regolari sono uno strumento molto forte ma costoso. È valido usarli per verificare se il primo carattere è una cifra ma non è così elegante :) Preferisco questo modo:
public boolean isLeadingDigit(final String value){
final char c = value.charAt(0);
return (c >= '0' && c <= '9');
}
functionnon è Java. 2) Questo consente solo numeri arabi, non cinesi, indiani, ecc. Potrebbe essere quello che preferisci, ma non è specificato nella domanda. 3) Ho già trattato questa soluzione esatta nella mia risposta quattro anni fa.
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}suffisso, il che significa che "il pattern precedente deve apparire tra 1 e 1 volta". Ciò significa esattamente lo stesso che il modello fa da solo.
Mi sono appena imbattuto in questa domanda e ho pensato di contribuire con una soluzione che non utilizzi regex.
Nel mio caso utilizzo un metodo di supporto:
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;
}
Probabilmente un'esagerazione, ma cerco di evitare le espressioni regolari ogni volta che posso.