En Java, ¿hay alguna forma de averiguar si el primer carácter de una cadena es un número?
Una forma es
string.startsWith("1")
y haz lo anterior hasta las 9, pero eso parece muy ineficiente.
En Java, ¿hay alguna forma de averiguar si el primer carácter de una cadena es un número?
Una forma es
string.startsWith("1")
y haz lo anterior hasta las 9, pero eso parece muy ineficiente.
Character.isDigit(string.charAt(0))
Tenga en cuenta que esto permitirá cualquier dígito Unicode , no solo 0-9. Quizás prefieras:
char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');
O las soluciones de expresiones regulares más lentas:
s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")
Sin embargo, con cualquiera de estos métodos, primero debe asegurarse de que la cadena no esté vacía. Si lo es, charAt(0)
y substring(0, 1)
va a lanzar una StringIndexOutOfBoundsException
. startsWith
no tiene este problema.
Para hacer que toda la condición sea una línea y evitar verificaciones de longitud, puede modificar las expresiones regulares a lo siguiente:
s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")
Si la condición no aparece en un bucle cerrado en su programa, es probable que no se note el pequeño impacto en el rendimiento por usar expresiones regulares.
((null!=s) && Character.isDigit(s.charAt(0)) )
) o usar trucos comoCharacter.isDigit((s?s:"X").charAt(0))
Las expresiones regulares son una herramienta muy fuerte pero cara. Es válido usarlos para comprobar si el primer carácter es un dígito pero no es tan elegante :) Prefiero así:
public boolean isLeadingDigit(final String value){
final char c = value.charAt(0);
return (c >= '0' && c <= '9');
}
function
no es Java. 2) Esto solo permite números arábigos, no chinos, indios, etc. Puede que sea lo que prefiera, pero no se especifica en la pregunta. 3) Ya cubrí esta solución exacta en mi respuesta hace cuatro años.
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}
sufijo, lo que significa que "el patrón anterior debe aparecer entre 1 y 1 veces". Esto significa exactamente lo mismo que el patrón por sí solo.
Me encontré con esta pregunta y pensé en contribuir con una solución que no usa expresiones regulares.
En mi caso utilizo un 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;
}
Probablemente una exageración, pero trato de evitar las expresiones regulares siempre que puedo.