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. startsWithno 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.
Re: "primero debe asegurarse de que la cadena no esté vacía" - verdadero y más que eso - también debe asegurarse de que no sea nulo, ya que si todos los métodos mostrados arrojarían excepciones. Puede verificar directamente (por ejemplo ((null!=s) && Character.isDigit(s.charAt(0)) )) o usar trucos comoCharacter.isDigit((s?s:"X").charAt(0))
epeleg
8
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í:
publicboolean isLeadingDigit(finalString value){finalchar c = value.charAt(0);return(c >='0'&& c <='9');}
1) functionno 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.
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");}
No necesita el {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.
Andrzej Doyle
Esta solución no funciona ya que String.matches y Pattern API intentan hacer coincidir la cadena completa y no solo el primer carácter
Amrish Pandey
0
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:
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;}
Probablemente una exageración, pero trato de evitar las expresiones regulares siempre que puedo.
Respuestas:
Tenga en cuenta que esto permitirá cualquier dígito Unicode , no solo 0-9. Quizás prefieras:
O las soluciones de expresiones regulares más lentas:
Sin embargo, con cualquiera de estos métodos, primero debe asegurarse de que la cadena no esté vacía. Si lo es,
charAt(0)
ysubstring(0, 1)
va a lanzar unaStringIndexOutOfBoundsException
.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:
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.
fuente
((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í:
fuente
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.fuente
{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:
Probablemente una exageración, pero trato de evitar las expresiones regulares siempre que puedo.
fuente