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.
importjavax.swing.*;publicclassPllacaCarro{publicstaticvoidmain(String[]args){Stringplaca=JOptionPane.showInputDialog(null,"Digite a placa do carro");Stringletras="";Stringnumeros="";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:
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);
utilizei a função valew pela dica, era isso mesmo que eu precisava, testei ela e funciona legal
tinorberto:
Utilize o metedo isDigit da classe Character e o isNumber , ai e so percorrer a string e ir fazendo a comparação …
Stringletras="aeiou";for(inti=0; i < letras.length(); i++) {if(Character.isDigit(letras.charAt(i))==true){
System.out.println("Possui numeros");break;}
}
flw
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
importjavax.swing.*;publicclassPllacaCarro{publicstaticvoidmain(String[]args){Stringplaca=JOptionPane.showInputDialog(null,"Digite a placa do carro");Stringletras="";Stringnumeros="";booleanvalido=true;charch;StringfimPl=placa.substring(6);intfimPlaca=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(inta=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(intb=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.
T
thiago.correa
Na verdade você está acessando uma posição que não existe na String
Acho que o melhor a fazer é usar expressão regular
Além de não usar dependência, pode ser feita numa linha e nem precisa testar o tamanho da String.
U
Usuk
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.
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,
O
ozix
Você não entendeu. O que eu quis dizer é que a regex já testa o tamanho. Seu código ficaria assim:
if (!placa.matches("\p{L}{3}\d{4}")) {
JOptionPane.showMessageDialog(null, "Placa invalida")
}
G
gqferreira
poxa… assim não resolve?
° Pegar a parte que deveria ser número e…
try
{
Integer.parseInt(SuaVariavelQueContemONumero);
JOptionPane.showMessageDialog(null,"O valor é numerico", "Numero", JOptionPane.INFORMATION_MESSAGE);
}
catch(NumberFormatException ex)
{
JOptionPane.showMessageDialog(null,"O valor contém caracters alfanuméricos", "Alfanumerico", JOptionPane.ERROR_MESSAGE);
}
D
DavidUser
proucure melhor antes de postar, ja existem foruns que resolvem sua pergunta
T
thiago.correa
Usuk:
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.
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,
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
U
Usuk
thiago.correa:
Usuk:
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.
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,
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 ;)
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/.
D
DLima
Use Expressões Regulares.
packagevalidacaoPlacaCarro;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassPlacadeCarroComER{publicstaticvoidmain(String[]args){Stringplaca="s1a0320";intfim=0;Patternpattern=Pattern.compile("[a-zA-Z]{3}-?[0-9]{4}");Matchermatcher=pattern.matcher(placa);if(matcher.find()){fim=matcher.end();}if(fim==7){System.out.println("A placa é válida e é de Moto");}elseif(fim==8){System.out.println("A placa é válida e é de Carro");}else{System.out.println("Não é uma placa válida");}}