Problema para comparar variável com texto de arquivo

4 respostas
H

Galera, estou tentando comparar o texto de uma variável que o usuário digita com o texto de um arquivo, usando o seguinte algoritmo:

String placa = (JOptionPane.showInputDialog(null, "Digite a placa do carro")).toUpperCase();
            FileReader arquivo = new FileReader(nomeArq); // associa variável ao arquivo
            BufferedReader br = new BufferedReader(arquivo); // abre arquivo para leitura
            String verifica_linha; // linha com um registro do arquivo
            String[] campos = null; // vetor com os vários campos de cada linha

            // lê todas as linhas do arquivo (enquanto não chegar ao fim do arq)
            while ((verifica_linha=br.readLine())!=null){
                campos=linha.split(":"); //quebra dados do texto separados por ":"
                if(placa.equals(campos[0])){
                    JOptionPane.showConfirmDialog(null, "Confirmar dados:\nPlaca: " + placa + "    Cliente: " + campos[1] +
                            "\nCarro: " + campos[2] + " " + campos[3]);
                }
                else{
                    JOptionPane.showMessageDialog(null, "Carro não cadastrado no sistema - placa inválida", "Erro de Cadastro",
                            JOptionPane.ERROR_MESSAGE);
                    VerificaCliente();
                }

            }

O problema é que ele está sempre retornando essa última condição (placa.equals(campos[0]) como falsa. Já debuguei pra ver qual valor cada variável assume e eles são iguais nas duas comparadas. Alguém sabe onde eu errei?

4 Respostas

RodrigoKaos

Esse array campos ta certo??

leofariasrj25

O problema provavelmente está no modo como está a formatação das linhas no arquivo que você está lendo E a expressão que você usou no split

Se houver espaços

campo1 : campo2 : campo3 : campo4

Nunca dará certo pois dada a expressão “:” para split ele não vai ignorar os espaços e “string” e " string " são considerados diferentes.

Dada a expresão que você usou no split a formatação das linhas no arquivo devem estar assim:

campo1:campo2:campo3:campo4

Além disso uma alternativa a linha 01: ao invés de usar toUpperCase, você pode usar equalsIgnoreCase() de forma direta no if da linha 10

H

Valeu leofariasrj, o problema estava no toUpperCase() mesmo. Tirei ele da parte do programa que gravava o documento e da comparação e funcionou, só deixei a mudança para letras maiúsculas na exibição mesmo.

Uma dúvida: o .toUpperCase() da problema se houver, no texto manipulado, além de letras, números e símbolos?

leofariasrj25

Dá e isso ta explicado na documentação da classe String que contém o método:

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toUpperCase()

Sempre leia a documentação :wink:

Criado 22 de junho de 2013
Ultima resposta 22 de jun. de 2013
Respostas 4
Participantes 3