Pessoal, estou fazendo um programinha que recebe um arquivo .txt com palavras em ingles e filtro ele deixando tudo minusculo, sem acento, cedinha, hifen, virgula, etc… ou seja, somente o texto de a-z + espaço…
meu codigo que fiz eh esse da filtragem…
public String retiraPalavras() throws IOException {
String retorno = "";
int i = 0;
BufferedReader buf = arquivo.getBuffer();
i = buf.read();
while(i != -1){
if ((i==(int)'a') || (i==(int)'A')){
quantidade[0] = quantidade[0]+1;
retorno += 'a';
}
else if (i==(int)'b' || (i==(int)'B')){
quantidade[1] = quantidade[1]+1;
retorno += 'b';
}
else if (i==(int)'c'|| (i==(int)'C')){
quantidade[2] = quantidade[2]+1;
retorno += 'c';
}
else if (i==(int)'d'|| (i==(int)'D')){
quantidade[3] = quantidade[3]+1;
retorno += 'd';
}
else if (i==(int)'e'|| (i==(int)'E')){
quantidade[4] = quantidade[4]+1;
retorno += 'e';
}
else if (i==(int)'f'|| (i==(int)'F')){
quantidade[5] = quantidade[5]+1;
retorno += 'f';
}
else if (i==(int)'g'|| (i==(int)'G')){
quantidade[6] = quantidade[6]+1;
retorno += 'g';
}
else if (i==(int)'h'|| (i==(int)'H')){
quantidade[7] = quantidade[7]+1;
retorno += 'h';
}
else if (i==(int)'i'|| (i==(int)'I')){
quantidade[8] = quantidade[8]+1;
retorno += 'i';
}
else if (i==(int)'j'|| (i==(int)'J')){
quantidade[9] = quantidade[9]+1;
retorno += 'j';
}
else if (i==(int)'k'|| (i==(int)'K')){
quantidade[10] = quantidade[10]+1;
retorno += 'k';
}
else if (i==(int)'l'|| (i==(int)'L')){
quantidade[11] = quantidade[11]+1;
retorno += 'l';
}
else if (i==(int)'m'|| (i==(int)'M')){
quantidade[12] = quantidade[12]+1;
retorno += 'm';
}
else if (i==(int)'n'|| (i==(int)'N')){
quantidade[13] = quantidade[13]+1;
retorno += 'n';
}
else if (i==(int)'o'|| (i==(int)'O')){
quantidade[14] = quantidade[14]+1;
retorno += 'o';
}
else if (i==(int)'p'|| (i==(int)'P')){
quantidade[15] = quantidade[15]+1;
retorno += 'p';
}
else if (i==(int)'q'|| (i==(int)'Q')){
quantidade[16] = quantidade[16]+1;
retorno += 'q';
}
else if (i==(int)'r'|| (i==(int)'R')){
quantidade[17] = quantidade[17]+1;
retorno += 'r';
}
else if (i==(int)'s'|| (i==(int)'S')){
quantidade[18] = quantidade[18]+1;
retorno += 's';
}
else if (i==(int)'t'|| (i==(int)'T')){
quantidade[19] = quantidade[19]+1;
retorno += 't';
}
else if (i==(int)'u'|| (i==(int)'U')){
quantidade[20] = quantidade[20]+1;
retorno += 'u';
}
else if (i==(int)'v'|| (i==(int)'V')){
quantidade[21] = quantidade[21]+1;
retorno += 'v';
}
else if (i==(int)'w'|| (i==(int)'W')){
quantidade[22] = quantidade[22]+1;
retorno += 'w';
}
else if (i==(int)'x'|| (i==(int)'X')){
quantidade[23] = quantidade[23]+1;
retorno += 'x';
}
else if (i==(int)'y'|| (i==(int)'Y')){
quantidade[24] = quantidade[24]+1;
retorno += 'y';
}
else if (i==(int)'z'|| (i==(int)'Z')){
quantidade[25] = quantidade[25]+1;
retorno += 'z';
}
else if (i==(int)' '){
quantidade[26] = quantidade[26]+1;
retorno += ' ';
}
else if(i==(int)'-' || (i==(int)'
Qual o programa...
testei alguns .txt.
* Para um texto com 200 linhas o tempo pra ele fazer isso e jogar num JTextArea foi de 207 milisegundos
* para um texto com 1000 linhas o tempo para ele fazer isso e jogar num JTextArea foi de 7657 milisegundos = 7,6 segundos aproximadamente.
* para um texto com 2000 linhas o tempo para ele fazer isso e jogar num JTextArea foi de 55130 milisegundos = 55 segundos
* o problema vem agora, o texto original tem 5319 linhas, coloquei pra rodar, ja se passou 10 minutos e nao retornou resposta(tb nao deu erro, continua la rodando com processador a 100% mas tive que parar a execução forçadamente pq nao sei quando iria terminar mas esperei 10 minutos e nada)...
eu queria saber o pq dessa demora e se tem como agilizar esses calculos...
ps.: minha primeira implementação foi usando buff.readLine(); e usando substring(i,i+1) para pegar caractere por caractere mas o problema ficava na mudanca de linha que ele considerava como espaco, entre outros problemas na contagem de letras que ja esqueci.. porem no texto completo de 5319 linhas ele demorava em torno de 1 minuto e retornava o texto...
ja usando a ideia de codigo ascii da letra com o metodo read() ele faz a contagem perfeita mas to nesse impasse ai dessa demora(que em tese nao devia demorar tanto ja que pelo metodo substring ele tb verifica caractere por caractere o que no meu teexto original tem em torno de 150.000 caracteres)..
Alguma soluçao pessoal??? e agradeço...')){
retorno += ' ';
quantidade[26] = quantidade[26]+1;
}
else if(i==(int)'\n'){
retorno += '\n';
}
i = buf.read();
}
return retorno;
}
Qual o programa…
testei alguns .txt.
-
Para um texto com 200 linhas o tempo pra ele fazer isso e jogar num JTextArea foi de 207 milisegundos
-
para um texto com 1000 linhas o tempo para ele fazer isso e jogar num JTextArea foi de 7657 milisegundos = 7,6 segundos aproximadamente.
-
para um texto com 2000 linhas o tempo para ele fazer isso e jogar num JTextArea foi de 55130 milisegundos = 55 segundos
-
o problema vem agora, o texto original tem 5319 linhas, coloquei pra rodar, ja se passou 10 minutos e nao retornou resposta(tb nao deu erro, continua la rodando com processador a 100% mas tive que parar a execução forçadamente pq nao sei quando iria terminar mas esperei 10 minutos e nada)…
eu queria saber o pq dessa demora e se tem como agilizar esses calculos…
ps.: minha primeira implementação foi usando buff.readLine(); e usando substring(i,i+1) para pegar caractere por caractere mas o problema ficava na mudanca de linha que ele considerava como espaco, entre outros problemas na contagem de letras que ja esqueci… porem no texto completo de 5319 linhas ele demorava em torno de 1 minuto e retornava o texto…
ja usando a ideia de codigo ascii da letra com o metodo read() ele faz a contagem perfeita mas to nesse impasse ai dessa demora(que em tese nao devia demorar tanto ja que pelo metodo substring ele tb verifica caractere por caractere o que no meu teexto original tem em torno de 150.000 caracteres)…
Alguma soluçao pessoal??? e agradeço…
