Как узнать, является ли первый символ строки числом?

В Java есть способ узнать, является ли первый символ строки числом?

Один из способов -

string.startsWith("1")

и делать все это до 9, но это кажется очень неэффективным.

Ответ 1

Character.isDigit(string.charAt(0))

Обратите внимание, что это позволит указать любую цифру Unicode, а не только 0-9. Вы можете предпочесть:

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

Или медленные решения регулярных выражений:

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

Однако с помощью любого из этих методов вы должны быть уверены, что строка не пустая. Если это так, charAt(0) и substring(0, 1) будут выбрасывать StringIndexOutOfBoundsException. startsWith не имеет этой проблемы.

Чтобы сделать все условие одной строкой и избежать проверок длины, вы можете изменить регулярные выражения на следующее:

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

Если условие не отображается в сжатом цикле в вашей программе, небольшое повышение производительности для использования регулярных выражений вряд ли будет заметным.

Ответ 2

Регулярные выражения - очень сильный, но дорогой инструмент. Действительно использовать их для проверки, является ли первый символ цифрой, но он не настолько изящный:) Я предпочитаю этот способ:

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

Ответ 3

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

Ответ 4

Я только наткнулся на этот вопрос и подумал о том, чтобы помочь с решением, которое не использует регулярное выражение.

В моем случае я использую вспомогательный метод:

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

Вероятно, избыток, но я стараюсь избегать регулярного выражения, когда только могу.

Ответ 5

Попробуйте этот код, который поможет вам:)

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