char c = string.charAt(0);
isDigit =(c >='0'&& c <='9');
Ou as soluções de regex mais lentas:
s.substring(0,1).matches("\\d")// or the equivalent
s.substring(0,1).matches("[0-9]")
No entanto, com qualquer um desses métodos, você deve primeiro se certificar de que a string não está vazia. Se for, charAt(0)e substring(0, 1)vai lançar um StringIndexOutOfBoundsException. startsWithnão tem esse problema.
Para transformar toda a condição em uma linha e evitar verificações de comprimento, você pode alterar as regexes para o seguinte:
s.matches("\\d.*")// or the equivalent
s.matches("[0-9].*")
Se a condição não aparecer em um loop fechado em seu programa, o pequeno impacto no desempenho pelo uso de expressões regulares provavelmente não será perceptível.
Re: "você deve primeiro ter certeza de que a string não está vazia" - verdadeiro e mais do que isso - você também deve certificar-se de que não é nulo, pois todos os métodos exibidos lançarão exceções. Você pode verificar diretamente (por exemplo ((null!=s) && Character.isDigit(s.charAt(0)) )) ou usar truques comoCharacter.isDigit((s?s:"X").charAt(0))
epeleg
8
As expressões regulares são ferramentas muito fortes, mas caras. É válido usá-los para verificar se o primeiro caractere é um dígito, mas não é tão elegante :) Eu prefiro assim:
publicboolean isLeadingDigit(finalString value){finalchar c = value.charAt(0);return(c >='0'&& c <='9');}
1) functionnão é Java. 2) Isso permite apenas algarismos arábicos, não chinês, indiano, etc. Isso pode ser o que você prefere, mas não está especificado na pergunta. 3) Já abordei essa solução exata em minha resposta há quatro anos.
Michael Myers
0
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");}
Você não precisa do {1,1}sufixo, o que significa que "o padrão anterior deve aparecer entre 1 e 1 vezes". Isso significa exatamente o mesmo que o próprio padrão.
Andrzej Doyle
Esta solução não funciona, pois a API String.matches e Pattern tenta combinar a string completa e não apenas o primeiro caractere
Amrish Pandey
0
Acabei de me deparar com essa dúvida e pensei em contribuir com uma solução que não use regex.
No meu caso, uso um método auxiliar:
publicboolean 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;}
Provavelmente um exagero, mas tento evitar regex sempre que posso.
Respostas:
Observe que isso permitirá qualquer dígito Unicode , não apenas 0-9. Você pode preferir:
Ou as soluções de regex mais lentas:
No entanto, com qualquer um desses métodos, você deve primeiro se certificar de que a string não está vazia. Se for,
charAt(0)
esubstring(0, 1)
vai lançar umStringIndexOutOfBoundsException
.startsWith
não tem esse problema.Para transformar toda a condição em uma linha e evitar verificações de comprimento, você pode alterar as regexes para o seguinte:
Se a condição não aparecer em um loop fechado em seu programa, o pequeno impacto no desempenho pelo uso de expressões regulares provavelmente não será perceptível.
fonte
((null!=s) && Character.isDigit(s.charAt(0)) )
) ou usar truques comoCharacter.isDigit((s?s:"X").charAt(0))
As expressões regulares são ferramentas muito fortes, mas caras. É válido usá-los para verificar se o primeiro caractere é um dígito, mas não é tão elegante :) Eu prefiro assim:
fonte
function
não é Java. 2) Isso permite apenas algarismos arábicos, não chinês, indiano, etc. Isso pode ser o que você prefere, mas não está especificado na pergunta. 3) Já abordei essa solução exata em minha resposta há quatro anos.fonte
{1,1}
sufixo, o que significa que "o padrão anterior deve aparecer entre 1 e 1 vezes". Isso significa exatamente o mesmo que o próprio padrão.Acabei de me deparar com essa dúvida e pensei em contribuir com uma solução que não use regex.
No meu caso, uso um método auxiliar:
Provavelmente um exagero, mas tento evitar regex sempre que posso.
fonte