Em Java, existe uma maneira de descobrir se o primeiro caractere de uma string é um número?
Uma maneira é
string.startsWith("1")
e fazer tudo acima até as 9, mas isso parece muito ineficiente.
Em Java, existe uma maneira de descobrir se o primeiro caractere de uma string é um número?
Uma maneira é
string.startsWith("1")
e fazer tudo acima até as 9, mas isso parece muito ineficiente.
Respostas:
Character.isDigit(string.charAt(0))
Observe que isso permitirá qualquer dígito Unicode , não apenas 0-9. Você pode preferir:
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
. 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:
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.
((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:
public boolean isLeadingDigit(final String value){
final char c = value.charAt(0);
return (c >= '0' && c <= '9');
}
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.
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}
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:
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;
}
Provavelmente um exagero, mas tento evitar regex sempre que posso.