Opa. Estou percorrendo um arquivo de texto e tenho que achar determinada palavra neste arquivo. Acontece que esta determinada palavra pode variar, então criei um arquivo de texto para funcionar como um “dicionário”. O que estou tentando fazer é ler esse arquivo (dicionário), e a cada linha percorrer cada char do meu arquivo de texto e comparar se a primeira letra da palavra do dicionário é igual a que estou varrendo no arquivo. Se for, eu copio este char para uma string e vejo se a próxima letra do arquivo de texto é igual a segunda letra da palavra do dicionário. Se não for, eu sigo varrendo o arquivo.
Ao meu ver parece fazer sentido, meu maior problema é realmente conhecer as classes do java.
Aqui esta um pouco do código e o erro que estou tendo:
String portal = new String("");
String linhaArqPortais = new String(" ");
FileReader lePortais = new FileReader(dirPortais);
BufferedReader lerArqPortais = new BufferedReader(lePortais);
linhaArqPortais = lerArqPortais.readLine();
int count = conteudo.length()-1;
int pos = 1;
while (linhaArqPortais != null) {
linhaArqPortais = lerArqPortais.readLine();
RgxPortal = linhaArqPortais;
for (int i = 0; i < count; i++) {
if (conteudo.charAt(count)==linhaArqPortais.charAt(pos)){
portal = portal+conteudo.charAt(count);
pos++;
if (portal==linhaArqPortais) {
System.out.println("PORTAL ENCONTRADO: "+portal);
}
}
else {
pos=1;
portal = "";
}
}
}
Exception in thread “main” java.lang.NullPointerException
O problema parece acontecer quando vou alimentar a variável portal com a posição atual.
Obrigado pela ajuda Douglas, mas infelizmente o problema está na minha comparação “if conteudo.charAt(i)==linhaArqPortais.charAt(pos)”. Ainda estou tentando descobrir o que.
Está lançando “IndexOutOfBoundsException” nessa linha? Note que, depois que seu código percorrer tudo ele pode lançar uma Exception por não encontrar mais nada além do que já foi percorrido.
Rode a aplicação no modo Debug (na sua IDE) e ela vai parar no momento em que a exception é lançada, e você poderá ver (ao colocar o cursor em cima da variável) o que está dentro de cada variável: Verifique “conteudo”, “linhaArqPortais”, “i” e “pos”, para ver se não está tentando pegar um caracter num índice >= ao .lenght() dessas Strings.
Seu código quebrará se “cont” for >= conteudo.lenght(), e quebrará se “pos” tornar-se em alguma iteração >= linhaArqPortais.lenght(). Sugiro que você coloque ifs para verificar se estas situações ocorrem.
Cara, estou quebrando a cabeça e ainda não entendo como os index poderiam ultrapassar o index que está tentando ser atribuido. Só aumento a variável pos se ele achar uma letra igual a que há no dicionário, e se achar a segunda aumenta de novo, assim por diante. Se não achar, eu zero ela e começo de novo com a próxima palavra.
Dica: utilize o Try no seu código, pois para trabalhar com arquivos o ideal é utiliza-lo para abrir e fechar automaticamente a leitura e não ocasionar erros.
Opa Wallace, falha minha não estar postando o código todo. Há uma outra parte do código que extrai a informação do arquivo e joga para a variável conteudo. Todo o código está dentro de um try com um catch no final jogando um erro. O fato é que não estou tendo problemas com a abertura do arquivo, mas sim com o tratamento das informações contidas no mesmo.
Sendo assim eu aconselho você criar um método genérico e externo para realizar apenas a leitura de arquivos, e criar outro método específico para gerenciar arquivos, como por exemplo, a verificação de um conteúdo existente.
Opa Wallace! Com certeza manter uma estrutura OO ajuda na organização do código. Futuramente quero deixar o código todo com esta organização, mas inicialmente estou na fase de testes e não achei necessário, estou focando na lógica do algoritmo. Irei seguir a dica e tratar de nomear os processos de abertura de arquivos e tratamento de informações.
Procure sempre começar do jeito certo, pois na vida real as empresas e clientes não costumam liberar horas para refatorar código podre.
Acredite, um pequeno código mal organizado aqui e outro pequeno código mal organizado ali, acaba resultando num código mal organizado gigante.
Leva pouco tempo para se criar um monstro que ninguém quer manter.
Posta o seu código completo que fica fácil achar a causa do seu problema.
Outra coisa, evita fazer instanciações desnecessárias, como essas duas linhas que você escreveu:
String portal = new String("");
String linhaArqPortais = new String(" ");