Olá pessoal, fiz um pequena busca no forum e não achei nada que tratasse desse assunto.
eu preciso fazer um software que verifica a placa de um carro se é valida.
declarei uma string para receber a placa, verifica se tem 7 digitos , já que é a quantidade de character da placa
separei em outras 2 strings
os 3 primeiros character vai pra string letras
os 4 finais vão para a string numeros
agora eu gostaria de saber se existe uma função, que percorra a string e verifica cada character se é letra e se é numero, pra q eu possa assim validar a placa.
espero ter sido claro.
import javax.swing.* ;
public class PllacaCarro {
public static void main(String[] args){
String placa = JOptionPane.showInputDialog(null, "Digite a placa do carro");
String letras ="";
String numeros ="";
if(placa.length() == 7){
letras = placa.substring(0, 2);
numeros = placa.substring(3, 6);
}else{
JOptionPane.showMessageDialog(null, "Placa invalida");
}
Boa tarde, para fazer esta comparação você deve usar a classe Character, ele possui métodos de apoio ao tratamento de caracteres, entre eles os métodos isLetter e isDigit, abaixo um exemplo:
char letra = 'a';
Character.isLetter(letra);
Character.isDigit(letra);
Utilize o metedo isDigit da classe Character e o isNumber , ai e so percorrer a string e ir fazendo a comparação …
String letras="aeiou";
for (int i = 0; i < letras.length(); i++) {
if (Character.isDigit(letras.charAt(i))==true)
{
System.out.println("Possui numeros");
break;
}
}
[quote=jctosta]Boa tarde, para fazer esta comparação você deve usar a classe Character, ele possui métodos de apoio ao tratamento de caracteres, entre eles os métodos isLetter e isDigit, abaixo um exemplo:
char letra = 'a';
Character.isLetter(letra);
Character.isDigit(letra);
[/quote]
utilizei a função valew pela dica, era isso mesmo que eu precisava, testei ela e funciona legal
[quote=tinorberto]Utilize o metedo isDigit da classe Character e o isNumber , ai e so percorrer a string e ir fazendo a comparação …
String letras="aeiou";
for (int i = 0; i < letras.length(); i++) {
if (Character.isDigit(letras.charAt(i))==true)
{
System.out.println("Possui numeros");
break;
}
}
flw[/quote]
tive essa mesma ideia mas ta dando erro em tempo de execução , acho que o charAt não está aceitando uma variavel como parametro
está dando o seguinte erro
Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 2
at java.lang.String.charAt(Unknown Source)
at PllacaCarro.main(PllacaCarro.java:25)
import javax.swing.* ;
public class PllacaCarro {
public static void main(String[] args){
String placa = JOptionPane.showInputDialog(null, "Digite a placa do carro");
String letras ="";
String numeros ="";
boolean valido = true;
char ch ;
String fimPl = placa.substring(6) ;
int fimPlaca = Integer.parseInt(fimPl);
if(placa.length() == 7){
letras = placa.substring(0, 2);
numeros = placa.substring(3, 6);
}else{
JOptionPane.showMessageDialog(null, "Placa invalida");
valido = false;
}
if(valido == true ){
for(int a =0; a<3; a++){
ch = letras.charAt(a);
if(Character.isLetter(ch))
{
}else{
JOptionPane.showMessageDialog(null, "Os 3 primeiros caracters devem ser letras");
valido = false;
break;
}
}
for(int b = 0; b <3; b++){
ch = numeros.charAt(b);
if(Character.isDigit(ch))
{
}else{
JOptionPane.showMessageDialog(null, "Os 4 ultimos caracters devem ser numeros");
valido = false;
break;
}
}
}
se alguem puder me explicar outra maneira, agradeço.
[quote=Usuk][quote=ozix]Como disse o davidtiagoconceicao:
placa.matches("\p{L}{3}\d{4}")
Além de não usar dependência, pode ser feita numa linha e nem precisa testar o tamanho da String.[/quote]
eu preciso testar o tamanho pra evitar que o usuario digite uma placa com mais do que 7 caracteres
pq ABC12345 eh invalida
e assim eu testaria só os 7 primeiros digitos, se so 7 primeiros se enquadrassem seria aceito mesmo sendo invalido, entendeu ?
Thiago, não entendi por que o meu “for”, ta acessando posição que não existe na string, [/quote]
1º Se você chegou a testar os códigos com regex que foi enviado a você, você veria que se for digitado uma placa com menos do que 7 dígitos, ele não iria aceitar
2º Traduza a satcktrace Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 2 e verá que o vetor tem menos do 2 posições e você está tentando acessá-la
[quote=thiago.correa][quote=Usuk][quote=ozix]Como disse o davidtiagoconceicao:
placa.matches("\p{L}{3}\d{4}")
Além de não usar dependência, pode ser feita numa linha e nem precisa testar o tamanho da String.[/quote]
eu preciso testar o tamanho pra evitar que o usuario digite uma placa com mais do que 7 caracteres
pq ABC12345 eh invalida
e assim eu testaria só os 7 primeiros digitos, se so 7 primeiros se enquadrassem seria aceito mesmo sendo invalido, entendeu ?
Thiago, não entendi por que o meu “for”, ta acessando posição que não existe na string, [/quote]
1º Se você chegou a testar os códigos com regex que foi enviado a você, você veria que se for digitado uma placa com menos do que 7 dígitos, ele não iria aceitar
2º Traduza a satcktrace Exception in thread “main” java.lang.StringIndexOutOfBoundsException: String index out of range: 2 e verá que o vetor tem menos do 2 posições e você está tentando acessá-la ;)[/quote]
eu ainda sou iniciante em java, nem todas as propostas aqui eu entendo muito bem, como essa do regex,
sobre minha string eu vi o erro só depois, pois eu estava colocando substring(0, 2) e ele nao pega a posição final, eu pensei que pegava, valew pela ajuda agora o software está funcionando legal o/.
public class PlacadeCarroComER {
public static void main(String[] args) {
String placa = "s1a0320";
int fim=0;
Pattern pattern = Pattern.compile("[a-zA-Z]{3}-?[0-9]{4}");
Matcher matcher = pattern.matcher(placa);
if(matcher.find()){
fim = matcher.end();
}
if(fim==7){
System.out.println("A placa é válida e é de Moto");
}else if(fim==8){
System.out.println("A placa é válida e é de Carro");
}else{
System.out.println("Não é uma placa válida");
}