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
. startsWith
non 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');
}
function
non è 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.