:?:
olá.queria uma ajudinha. queria saber como faço para contar caracteres em um aruivo, não é pra saber quantos caracteres tem, mas sim saber quantas vezes aparece cada caractere diferente. tipo quantas vezes aparece a letra a, b ou espaço em branco.
não sei se é legal eu perguntar aki. é porque é pra um trabalhode classe. mas sei q é melhor q procurar códigos prontos no google. e o trabalho não é apenas isso, ´mas isso poderia me ajudar muito.
abrigado pessoal!
Olá
bom, acho que vc se refere a manupular String não é?
eu faço o seguinte:
String dado = “teste de String”;
for(int i = 0; i <dado.lenght(); i++){
Character caracter = dado.charAt(i);
essas duas linhas acima vão diluir toda sua String de modo que vc possa manipular cada “caracter” dela. assim vc pode saber, por meio de IF’s… os dados que vc deseja.
manipular String é um método que estou usando para treinar minha lógica e conhecimento da linguagem. com manipulação de String já fiz muitas coisas, até uma base dados em arquivos txt (formato ASCI - eu acho).
faz um testezinho simples aí para vc ver
um abraço
ViniGodoy
Para fazer a contagem, considere usar um map<Character, Integer> ou, se você tiver certeza de que só aparecem caracteres convertíveis para ascii um
char[255].
B
brunolinsalves
Bom dia souarte,
como o ViniGodoy disse, você poderia usar um Map<Character, Integer> para resolver seu problema.
Veja o código abaixo:
// Cria o Map e um StringBufferMap<Character,Integer>map=newHashMap<Character,Integer>();StringBufferstring=newStringBuffer();// Lê o arquivo e armazena em um StringBuffertry{FileReaderreader=newFileReader("c:\teste.txt");BufferedReaderleitor=newBufferedReader(reader);Stringlinha=null;while((linha=leitor.readLine())!=null){string.append(linha);}}catch(Exceptionex){ex.printStackTrace();}// Armazena a quantidade de cada letra no Mapfor(inti=0;i<string.length();i++)if(map.get(string.charAt(i))==null)map.put(string.charAt(i),1);elsemap.put(string.charAt(i),map.get(string.charAt(i))+1);// Imprime a quantidade de Cada letraObject[]a=map.keySet().toArray();Iteratori=map.values().iterator();System.out.println("Quantidade de letras: ");for(intj=0;j<a.length;j++){System.out.print(a[j]+" = ");System.out.print(i.next()+"\n");}
T
thingol
Para este caso em particular, você pode usar um array mesmo, que é bastante simples.
Basta se lembrar que um caracter pode ir de 0 até 65535, ou seja, você pode criar um array de 65536 inteiros, e incrementar o elemento a cada vez que você achar o caracter correspondente.
Na hora de mostrar as freqüências, você pode varrer esse array e só imprimir os valores de contagem quando eles forem diferentes de zero.
souarte
muito legal as respostas.
eu vi na API que FileInputStram lê bytes, eu poderia usá-la? e qual seria melhor?
vocês podem me indicar algum tutorial explicando sobre os tipos de caracteres, tipo ASCII, e esses negócio que eu não intendo?
sou iniciante, desculpa a iguinorancia. obrigado pelas respostas!
souarte
Map<Character,Integer> map = new HashMap<Character,Integer>();
StringBuffer string = new StringBuffer();
// Lê o arquivo e armazena em um StringBuffertry{FileReaderreader=newFileReader(“c:\teste.txt”);BufferedReaderleitor=newBufferedReader(reader);
vc pode ler usando BufferedReader e colocar dentro de um array e String… e depois passar para um conjunto todo o array… e mandar exibir o tamanho do conjunto.
eu faria dessa forma…
ViniGodoy
souarte:
muito legal as respostas.
eu vi na API que FileInputStram lê bytes, eu poderia usá-la? e qual seria melhor?
vocês podem me indicar algum tutorial explicando sobre os tipos de caracteres, tipo ASCII, e esses negócio que eu não intendo?
sou iniciante, desculpa a iguinorancia. obrigado pelas respostas!
No Unicode, alguns caracteres são representados por mais de um e, as vezes, mais de dois bytes. Existem também caracteres iguais que podem ser representados por conjuntos de bytes diferentes.
O FileReader faz a leitura da maneira correta, respeitando o Encoding do seu texto.
Você pode usar só o BufferedReader e o HashMap. O que você falou até daria para fazer, mas eu não recomendo. A leitura sem um buffer é muito mais lenta, então, é preferível acostumar-se com ele. E só o BufferedReader tem o método readLine.