2009-08-03 10 views

Respuesta

250
Character.isDigit(string.charAt(0)) 

Tenga en cuenta que this will allow any Unicode digit, no solo 0-9. Es posible que prefiera:

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 es así, charAt(0) y substring(0, 1) lanzarán un StringIndexOutOfBoundsException. startsWith no tiene este problema.

Para hacer todo el estado de una línea y evitar los controles de longitud, puede alterar 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 estrecho en su programa, el pequeño impacto de rendimiento para usar expresiones regulares no es probable que sea notable.

+0

wow. A la gente le encanta votarte :) gracias por la respuesta. – Omnipresent

+11

¿Por qué no? Es correcto * dos veces *. :) (Por cierto, te animo a votar más, votar es una parte integral de este sitio. Veo que tienes 41 publicaciones pero solo 19 votos en 7 meses.) –

+0

Ja, te doy la mitad de un voto por cada vez que tienes razón – jjnguy

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

No necesita el sufijo' {1,1} ' , lo que significa que "el patrón anterior debe aparecer entre 1 y 1 veces". Esto significa exactamente lo mismo que el patrón en sí mismo. –

+0

Esta solución no funciona, ya que String.matches y Pattern API intentan unir cadenas completas y no solo el primer carácter –

8

Las expresiones regulares son una herramienta muy fuerte pero costosa. Es válido para usarlos para comprobar si el primer carácter es un dígito, pero no es tan elegante :) Yo prefiero esta manera:

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

1) 'function' no es Java. 2) Esto solo permite números arábigos, no chinos, indios, etc. Eso podría ser lo que prefiera, pero no está especificado en la pregunta. 3) Ya cubrí esta solución exacta en mi respuesta hace cuatro años. –

0

me encontré con esta pregunta y pensaron en contribuir con una solución que hace no usar expresiones regulares

En mi caso uso un método de ayuda:

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 expresiones regulares siempre que puedo.

0

probar este código le ayudará a :)

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