Come faccio a sapere se il primo carattere di una stringa è un numero?

In Java c’è un modo per scoprire se il primo carattere di una stringa è un numero?

Un modo è

string.startsWith("1") 

e fare il sopra tutto fino alle 9, ma sembra molto inefficiente.

 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 di 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 essere sicuro che la stringa non sia vuota. Se lo è, charAt(0) e substring(0, 1) generano StringIndexOutOfBoundsException . startsWith non ha questo problema.

Per rendere l'intera condizione una riga ed evitare i controlli di lunghezza, è ansible modificare le espressioni regolari di seguito:

 s.matches("\\d.*") // or the equivalent s.matches("[0-9].*") 

Se la condizione non viene visualizzata in un ciclo limitato del programma, è improbabile che il piccolo impatto sulle prestazioni per l'utilizzo di espressioni regolari non sia evidente.

Le espressioni regolari sono strumenti molto forti ma costosi. È valido utilizzarli per verificare se il primo carattere è una cifra ma non è così elegante 🙂 Preferisco in questo modo:

 public boolean isLeadingDigit(final String value){ final char c = value.charAt(0); return (c >= '0' && c <= '9'); } 
 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"); } 

Ho appena trovato questa domanda e ho pensato di contribuire con una soluzione che non utilizza regex.

Nel mio caso uso 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 eccessivo, ma cerco di evitare regex ogni volta che posso.

Prova questo codice ti aiuterà 🙂

 import java.io.*; public class findDigit { public findDigit() { String line = "1Hello"; String firstLetter = String.valueOf(line.charAt(0)); //line had 0 to 5 string index char first = firstLetter.charAt(0); /* if (Character.isLetter(first)) //for alphabets if (Character.isSpaceChar(first)) //for spaces */ if (Character.isDigit(first)) // for Digits { int number = Integer.parseInt(firstLetter); System.out.println("This String has digit at first as: "+number); } else { System.out.println("This String has alphabet at first as: "+firstLetter); } } public static void main(String args[]) { new findDigit(); } }