2009-07-10 11 views
40

Tengo una cadena que contiene caracteres alfanuméricos.¿Cómo comprobar que una cadena comience con un número numérico?

Necesito comprobar si la cadena se inició con el número.

Gracias,

+1

hmmm, ¿puede ser más específico? Las respuestas son, en su mayoría, solo verificar el primer carácter. ¿Qué tipo de números quieres? ¡Estas respuestas no funcionarán para números negativos! también, ¿qué quieres después del número ... algo? – Tom

+0

Sí ... ¿quiso decir "número" o "dígito" ... ahora estoy confundido ... todos parecían pensar que el número significaba dígito ...:: suspiro :: – Tom

+0

Ese es un buen punto. Pensé que se refería a los dígitos. Si él se refería al número entonces definitivamente querrías la expresión regular. –

Respuesta

-2

utilizar una expresión regular como ^\d

68

Ver el isDigit(char ch) método:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Character.html

y lo pasan al primer carácter de la cadena utilizando el método String.charAt().

Character.isDigit(myString.charAt(0)); 
+7

Solo para completar: isDigit devuelve verdadero no solo 0..9 sino también otros dígitos (por ejemplo, árabe): http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Character .html # isDigit (char) –

+0

como lo hacen la mayoría de los métodos denominados isXXX(). Creo que eso está implícito en el nombre del método y se puede encontrar mirando el enlace al método que proporcioné ... – Jon

+0

@Csaba_H - FYI: 0-9 son números arábigos, pero entiendo su punto. – McDowell

1
System.out.println(Character.isDigit(mystring.charAt(0)); 

EDIT: buscó documentos java, miraba a los métodos de la clase cadena que me puede conseguir primero el carácter & miraron a los métodos de la clase de caracteres para ver si tiene cualquier método para comprobar tal cosa.

Creo que podrías hacer lo mismo antes de preguntarlo.

EDI2: Lo que quiero decir es, intente hacer las cosas, lea/encuentre & si no puede encontrar nada - pregunte.
Cometí un error al publicarlo por primera vez. isDigit es un método estático en la clase de personaje.

+0

Buena sugerencia. +1 por eso. –

15

Lo siento, no vi su etiqueta Java, solo leía la pregunta. Dejaré mis otras respuestas aquí de todos modos ya que las he escrito.

Java

String myString = "9Hello World!"; 
if (Character.isDigit(myString.charAt(0))) 
{ 
    System.out.println("String begins with a digit"); 
} 

C++:

string myString = "2Hello World!"; 

if (isdigit(myString[0])) 
{ 
    printf("String begins with a digit"); 
} 

Expresión regular:

\b[0-9] 

Alguna prueba de mi regex funciona: A menos que mis datos de prueba sean incorrectos? alt text http://i29.tinypic.com/15z5pw8.png

+0

Brock: OP ha agregado una etiqueta java (no especificada en la pregunta). – shahkalpesh

+0

¿Quizás ahora que he solucionado mi respuesta, la persona que me votó negativamente reconsiderará? –

+1

Creo que la expresión regular es incorrecta. No por las razones que puse en mi respuesta (porque no estoy seguro de estar en lo correcto, porque depende de lo que el OP pretendía ... debe aclarar), pero debido a la \ b. \ b es un límite de palabras. Desea forzar el dígito al comienzo de la cadena, por lo que debe usar ^. – Tom

5

Esto debería funcionar:

String s = "123foo"; 
Character.isDigit(s.charAt(0)); 
10

Creo que se debe utilizar una expresión regular:


import java.util.regex.*; 

public class Test { 
    public static void main(String[] args) { 
    String neg = "-123abc"; 
    String pos = "123abc"; 
    String non = "abc123"; 
     /* I'm not sure if this regex is too verbose, but it should be 
     * clear. It checks that the string starts with either a series 
     * of one or more digits... OR a negative sign followed by 1 or 
     * more digits. Anything can follow the digits. Update as you need 
     * for things that should not follow the digits or for floating 
     * point numbers. 
     */ 
    Pattern pattern = Pattern.compile("^(\\d+.*|-\\d+.*)"); 
    Matcher matcher = pattern.matcher(neg); 
    if(matcher.matches()) { 
     System.out.println("matches negative number"); 
    } 
    matcher = pattern.matcher(pos); 
    if (matcher.matches()) { 
     System.out.println("positive matches"); 
    } 
    matcher = pattern.matcher(non); 
    if (!matcher.matches()) { 
     System.out.println("letters don't match :-)!!!"); 
    } 
    } 
} 

es posible que desee ajustar este para aceptar los números de punto flotante, pero esto funcionará para negativos. ¡Otras respuestas no funcionarán para negativos porque solo verifican el primer personaje! Sea más específico acerca de sus necesidades y puedo ayudarlo a ajustar este enfoque.

+0

http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html – Johan

+5

Esa es una solución tremendamente compleja para "es el primer carácter un dígito" – skaffman

+0

+1 la pregunta fue ambiguo y no especificó "es el primer carácter un dígito" – Pablojim

Cuestiones relacionadas