Ajuda em JAVA

Mr.Eko

Power Member
É o seguinte: pretendo fazer um programa que abra ficheiros de texto e que leia caractér a caractér, para contar quantas letras há de cada letra do abecedário. As letras com acentos e outros caractéres especiais não contam.

Já consigo fazer a leitura dos caractéres. O meu problema é arranjar agora uma solução simples para comparar o caractér que é lido com as letras do abecedário e armazenar a quantidade de cada letra que existe no texto.

Sugestões? :)
 
o abecedario tem k? 23 letras...

um array de 23 posições iniciado todos a zero.

a cada letra que les subtrais 'A' e ficas com um numero... esse numero serve pra indexar ao array onde increventas o valor.

o array vai conter os contadores de cada letra.

a posição 0 tem o A
a posição 1 tem o B

tipo les 'C', ao codigo ascii do 'C'.. se subtraires o codigo ascii do 'A', ficas com 2.. incrementas o valor do array da posição 2

tas a ver +- o esquema acho....

é uma possivel solução, agora tens que ver , é que em java é tudo unicode e nao ascii, nao tenho bem a certeza se estas contas servem, mas podes partir por aqui.
 
É uma boa solução.

Teria que fazer uma função que devolvesse o valor ASCII do caractér.

Mas há outro problema: é que as letras maiusculas e as minusculas, apesar de serem as mesmas, têm valores diferentes. É boa solução criar um IF para verificar se a letra se encontra num ou noutro intervalo e depois fazer os cálculos?

Thanks.
 
primeiro faz o upper ou o lower como preferires de toda a string.


gutter,
a minha memória tá a falhar ou isto era um dos classicos trabalhos qd programação era C? ;)

um abraço.
 
Originally posted by Andr0m3da
(...)
a minha memória tá a falhar ou isto era um dos classicos trabalhos qd programação era C?

Em C já fiz um parecido...mas era inserir caractéres na String após certas letras ou um grupo de letras, etc, etc. :)

P.S.: Já agora, o programa já está feito. Thanks pela ajuda. :D
 
Originally posted by Andr0m3da
primeiro faz o upper ou o lower como preferires de toda a string.


gutter,
a minha memória tá a falhar ou isto era um dos classicos trabalhos qd programação era C? ;)

um abraço.

por acaso fiz esse trabalho ou parecido em assembly (FM no ISEL), pelo menos foi o algoritmo que me lembrei na altura.
 
qq coisa como

Código:
FileReader fr = new FileReader(File file) 
long[] aCharCount = new long['z'-'a'+1];

for (int i=0; i < 'z'-'a'+1; i++)
  aCharCount[i]=0;

int ch = fr.read();
while ( ch != -1 ) {
  if (ch >= 'a' and ch <= 'z')
    aCharCount[ch -'a'] += 1;
  else
  if (ch >= 'A' and ch <= 'Z')
    aCharCount[ch -'A'] += 1;
    

  ch = fr.read();
}
// a partir deste codigo tens o array preenchido com o q queres;

claro q não foi testado, mas não deve variar muito disto.
não fiz a passagem lower case pq não vale a pena; nem sequer pus isto a ler por strings, fica a ler apenas com os buffers internos.
 
Back
Topo