String en Java

ChikaBlueEyes
25 de Octubre del 2008
Hola! Soy muy novata en esto de los foros pero espero que la experiencia sea satisfactoria... A ver si me podéis ayudar... Tengo una clase Vehiculo y un atributo es la matrícula, que es un String. La cuestión viene con que en el setter quiero controlar que la matrícula es correcta, para lo que en España tiene que ser 4 números y 3 letras... ¿cómo compruebo que los 4 primeros caracteres del String son números y los otros 3 son letras?

Un saludo! y graciassss por adelantado!

Thunder
25 de Octubre del 2008
Hola mira esta funcion, creo que te funcionara, lo que hace analiza el caracter por caracter la cadena que se le pase, identifica si los primeros cuatro digitos son numeros con la funcion isNaN, cuando identifica que los primeros 4 digitos son numeros luego pasa a la validacion de los ultimos tres, tambien se utiliza la misma funcion para determinar si es ó no un numero, primeramente se analiza si la longitud que se le pasa como argumento a la funcion es igual a 7 de lo contrario devuelve false false, el valor devuelto son dos valores booleanos, el primero te indica si los primeros cuatro digitos son numeros y el segundo te indica si los ultimos tres numeros son diferente de numeros.

Es todo lo k se me ocurre, espero te sirva.

Saludo.

Thunder.

function analizar(d)
{
int i;
char caracter;
boolean numeros=false;
boolean validador_letras=false;
int contador=0;

if(d.length==7)
{
for(i=0; i< d.length;i++)
{
caracter=d.charAt(i);

if(isNaN(caracter)==false && contador < 5)
{
contador++;
if(contador==4)
{
validador_numeros=true;
}

}

if(contador > 4 && isNaN(caracter)==false)
{
validador_letras=false;
}
else
{
validador_letras=true;
}


}

}
return validador_numeros+ " " +validador_letras;
}

ferfv
25 de Octubre del 2008
Hola, apenas estoy aprendiendo expresiones regulares y seguramente hay otra manera más óptima de hacerlo pero aquí te va una función que se ajusta a tu nececidad, te regresa true si la matrícula es correcta y false si no lo es:

public boolean esCorrecta(String cadena){
Pattern p = Pattern.compile("\d\d\d\d\w\w\w");
Matcher m = p.matcher(cadena);
if(m.matches()){
return true
}else{
return false;
}
}

Solo ocupas importar la libreria:

import java.util.regex.*;

saludos

ferfv
25 de Octubre del 2008
sorry, me falto el punto y coma en true xD

ferfv
25 de Octubre del 2008
creo que no funciona como debería, estudiaré más las expresiones regulares y luego posteo de nuevo :P

ferfv
25 de Octubre del 2008
Ahora si! jaja son mis primeros post y equivocandome

esto es lo que nececitas:

public boolean esCorrecta(String cadena){
Pattern p = Pattern.compile("\d+\d+\d+\d+[A-Za-z]+[A-Za-z]+[A-Za-z]");
Matcher m = p.matcher(cadena);
if(m.matches()){
return true;
}else{
return false;
}
}

ferfv
25 de Octubre del 2008
¬¬ es sin los +

Pattern p = Pattern.compile("\\d\\d\\d\\d[A-Za-z][A-Za-z][A-Za-z]");

ferfv
25 de Octubre del 2008
¬¬ es sin los +

Pattern p = Pattern.compile("\d\d\d\d[A-Za-z][A-Za-z][A-Za-z]");

ferfv
25 de Octubre del 2008
un poco más optimizado :P

public boolean esCorrecta(String cadena){
Pattern p = Pattern.compile("\d\d\d\d[A-Za-z][A-Za-z][A-Za-z]");
Matcher m = p.matcher(cadena);
return m.matches();
}

Fernando
25 de Octubre del 2008
boolean Error(String matricula)
{
int cont=0;
for(int i= 0 ;i<matricula.Length();i++)
{
int exit=0;
if(i<4)
{
for(int j= (int)'A'; j<=26 && exit != 1;j++)
{
if(matricula.charAt(i) == (char)j )
{
cont++;
exit=1;
}
}
}
else
{
for(int k=0;k<=9 && exit != 1;k++)
{
if(matricula.charAt(i) == k)
{
cont++;
exit=1;
}
}
}
}

if(cont == 6)
return true;
else
return false;

}

Toma el valor verdadero si esta correctamente escrita la matricula........................................................................................no se si tiene algun error porque no tengo en este momento java asi que cualquier erro me lo comunicas ya.....