2011-10-27 27 views
6

El usuario ingresa cualquier cadena y el programa distingue si la cadena es una identificación de producto calificada o no.Cómo verificar si una cadena es de un patrón específico

Los identificadores de productos elegibles son cualquiera de cadenas que consta de dos letras mayúsculas y cuatro números. (Por ejemplo, "TV1523")

¿Cómo puedo hacer este programa?

+1

... pensando en ello y haciendo un intento .... –

+3

-1: suena como tarea, probablemente deberías tratar de resolverlo por ti mismo –

+0

Alex esto no es tarea. – schizoid322

Respuesta

25

debe comparar la cadena mediante una expresión regular, por ejemplo:

str.matches("^[A-Z]{2}\\d{4}") le dará un valor booleano si coincide o no.

La expresión regular funciona de la siguiente manera:

^ Indicates that the following pattern needs to appear at the beginning of the string. 
[A-Z] Indicates that the uppercase letters A-Z are required. 
{2} Indicates that the preceding pattern is repeated twice (two A-Z characters). 
\\d Indicates you expect a digit (0-9) 
{4} Indicates the the preceding pattern is expected four times (4 digits). 

Utilizando este método, puede recorrer a través de cualquier número de cuerdas y comprobar si coinciden con los criterios dados.

Sin embargo, debe leer expresiones regulares, hay maneras más eficientes de almacenar el patrón si le preocupa el rendimiento.

+1

No se perdió el '$', su '^' es innecesario. El método 'matcher()' intenta hacer coincidir la entrada completa con el patrón, por lo que tiene los dos anclajes "integrados". [clase Matcher] (http://download.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html). De todos modos +1 para la explicación del patrón. – stema

+0

Gracias por la explicación detallada. ¡Realmente aprecio tu ayuda! – schizoid322

0
public static void main(String[] args) throws Exception { 
    String id = "TV1523"; 
    BufferedReader br = new BufferedReader((new InputStreamReader(System.in))); 
    String tocompare = br.readLine(); 
    if(tocompare.equals(id)) { //do stuff 

algo por el estilo, a menos que usted puede ser que la varita para encerrar el readLine() dentro de un intento de captura en su lugar: x

+0

Gracias por la respuesta, pero parece que solo 'TV1523' es válido en su respuesta. Quiero decir que las dos capitales y los cuatro números son válidos. – schizoid322

+0

@ schizoid322 que es una muestra, intente codificar un poco usted mismo;) –

4

Debería echar un vistazo más de cerca a las expresiones regulares. Un tutorial es, p. aquí al regular-expressions.info.

Un ejemplo para su patrón podría ser

^[A-Z]{2}\d{4}$ 

se puede ver que here on Regexr.com un buen lugar para probar expresiones regulares en línea.

Aquí está java regex tutorial allí se puede ver cómo se los llama en Java.

+0

Aaaa. Me perdí los $. ¡Bien hecho! – Ewald

+0

Realmente aprecio tu buena respuesta. ¡Tu respuesta es casi perfecta! – schizoid322

Cuestiones relacionadas