[RESOLVIDO]Problemas com Scanner

6 respostas
thegoergen

Pessoal,

tenho um programa feito há algum tempo já, que sempre funcionou. Entretanto, formatei meu PC e fiquei só com o código salvo, e meses não o usei. Agora reistalei meu NetBeans e meu JDK, para poder reutilizá-lo. Mas estou com um problema com a classe Scanner (acredito qeu seja nela).

Tenho um arquivo de palavras, e eu faço uma busca com pattern nele, a partir de uma palavra digitada. Entretanto, meu arquivo simplesmente para de buscar na palavra 104, ignorando todas as outras abaixo (acho que tenho umas 30 mil no arquivo). Sem dar erro nenhum, sem estouro de memória nem nada. Alguém sabe de algum problema assim. Acredito que seja com alguma das atualizações Java, porque realmente revirei o código, e acredito que ele sempre tenha sido assim.

Até pesquisei no arquivo para ver se tinha caracteres especiais, mas não tem nada. A última palvra pesquisada é "abolicionismo", e a próxima seria "abolicionista", e é ignorada.

private TreeSet<String> pesquisarPalavraScanner(String regex, String nomeDoArquivo) throws Exception {
        TreeSet<String> a = new TreeSet();

        File arquivo = new File(nomeDoArquivo);
        Scanner lendoArquivo = new Scanner(arquivo);

        // leia o arquivo linha por linha até chegar ao seu fim
        Pattern p = Pattern.compile(" " + regex + " ", Pattern.CASE_INSENSITIVE);

        while (lendoArquivo.hasNextLine()) {
            String linha = lendoArquivo.nextLine();
            String[] palavras = linha.split(" "); // para a possibilidade de várias palavras numa linha
            for (int i = 0; i < palavras.length; i++) {
                if (p.matcher(" " + palavras[i] + " ").find()) {
                    a.add(palavras[i]);
                }
            }
        }

        // fechando o scanner
        lendoArquivo.close();

        return a;
    }

6 Respostas

Arthur_F_Ferreira

Me tira uma dúvida quanto ao seu código. No while que você lê as linhas do arquivo você tem a variável linha que tem de fazer a comparação, certo? Mas em que momento você usa isso? Nesse código essa variável nunca é usada…

thegoergen

Bah, desculpe. Corrigi o código. Faltou uma linha.

Arthur_F_Ferreira

Tem como você dizer qual é o regex que está usando para buscar no matcher? Só para eu fazer testes aqui.

thegoergen

Fiz alguns testes, e mesmo sem o matcher, não funciona. Simplesmente lendo o arquivo, ele não lê tudo.

public static void main(String args[]) {
                
        //File arquivo = new File("ListaBuscaPalavras.txt");
        File arquivo = new File("palavrasGerais.txt");
        try {
            Scanner lendoArquivo = new Scanner(arquivo);
            
        while (lendoArquivo.hasNextLine()) {
            String linha = lendoArquivo.nextLine();
            System.out.println(linha + "\n");
        }

        // fechando o scanner
        lendoArquivo.close(); 
        } catch (FileNotFoundException ex) {
            System.out.println("Não achou arquivo");
        }

Alguém sabe um modo que eu possa compartilhar os arquivos de texto aqui? Eu tenho 2, o "palavrasGerais" e o "ListaBuscaPalavras". O primeiro para na palavra abolicionismo, enquanto que o outro sequer é lido (como se estivesse vazio). Acredito que o problema seja neles, porque o código está limpo.

[EDITADO]
Aí estão os 2 arquivos:
* https://www.dropbox.com/s/e5glsx6r8305uw8/ListaBuscaPalavras.txt
* https://www.dropbox.com/s/85zkosqrmgb8xdy/palavrasGerais.txt
[/EDITADO]

[EDITADO2]
Testei usando a classe BufferedReader, e funcionou (tinha usado ela antes, mas o desempenho é pior). Então parece que o problema é com o Scanner mesmo.

FileReader fr = new FileReader(arquivo);
        BufferedReader br = new BufferedReader(fr);
        while (br.ready()) {
            String linha = br.readLine();
            System.out.println(linha + "\n");
        }
[/EDITADO2]
Arthur_F_Ferreira

Camarada,

Eu testei aqui na minha máquina com seus dois arquivos e em ambos todo o arquivo foi lido. Segue o código:

public class App {
    public static void main(String[] args) {
        File arquivo = new File("ListaBuscaPalavras.txt");
        // File arquivo = new File("palavrasGerais.txt");
        try {
            Scanner lendoArquivo = new Scanner(arquivo);

            while (lendoArquivo.hasNextLine()) {
                String linha = lendoArquivo.nextLine();
                System.out.println(linha + "\n");
            }

            // fechando o scanner
            lendoArquivo.close();
        } catch (FileNotFoundException ex) {
            System.out.println("Não achou arquivo");
        }
    }
}

A JDK que eu testei é a 1.7

thegoergen

Bah, vou ver então o que está acontecendo. Devo estar com alguma das bibliotecas desatualizada ou algo assim. Vou conferir

Muito obrigado.

Criado 28 de janeiro de 2013
Ultima resposta 1 de fev. de 2013
Respostas 6
Participantes 2