Hoe kom ik erachter of het eerste teken van een tekenreeks een getal is?

Is er in Java een manier om erachter te komen of het eerste teken van een tekenreeks een getal is?

Een manier is

string.startsWith("1")

en doe het bovenstaande helemaal tot 9, maar dat lijkt erg inefficiënt.


Antwoord 1, autoriteit 100%

Character.isDigit(string.charAt(0))

Merk op dat dit zal toestaan elkUnicode-cijfer, niet alleen 0-9. Misschien geeft u er de voorkeur aan:

char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');

Of de langzamere regex-oplossingen:

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

Bij elk van deze methoden moet u er echter eerst zeker van zijn dat de tekenreeks niet leeg is. Als dat zo is, zullen charAt(0)en substring(0, 1)een StringIndexOutOfBoundsExceptiongenereren. startsWithheeft dit probleem niet.

Om de hele voorwaarde één regel te maken en lengtecontroles te vermijden, kunt u de regexen als volgt wijzigen:

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

Als de voorwaarde niet in een strakke lus in uw programma voorkomt, is de kleine prestatiehit voor het gebruik van reguliere expressies waarschijnlijk niet merkbaar.


Antwoord 2, autoriteit 3%

Reguliere uitdrukkingen zijn een zeer sterke, maar dure tool. Het is geldig om ze te gebruiken om te controleren of het eerste teken een cijfer is, maar het is niet zo elegant 🙂 Ik geef de voorkeur aan deze manier:

public boolean isLeadingDigit(final String value){
    final char c = value.charAt(0);
    return (c >= '0' && c <= '9');
}

Antwoord 3

IN KOTLIN:

Steldat je een Stringals volgt hebt:

private val phoneNumber="9121111111"

Bij eerstezou je de eerste moeten krijgen:

val firstChar=phoneNumber.slice(0..0)

Op tweedekun je het eerste charaanvinken dat returneen Boolean:

firstChar.isInt() // or isFloat()

Antwoord 4

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");
}

Antwoord 5

Ik kwam deze vraag net tegen en dacht erover bij te dragen met een oplossing die geen regex gebruikt.

In mijn geval gebruik ik een hulpmethode:

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;
}

Waarschijnlijk een overkill, maar ik probeer regex zoveel mogelijk te vermijden.


Antwoord 6

Om te controleren of alleen de eerste letter een cijfer of teken is —
Voor nummer
Character.isDigit(str.charAt(0)) –return true

Voor karakter
Character.isLetter(str.charAt(0)) –return true

Other episodes