读取文本文件并存储每个单个字符

我想创建一个java程序,它将读取文本文件并存储每个单个字符。 因此它将考虑标点符号,字母,数字,大写,小写等。 给定一个文本文件:

玫瑰是红色的,

紫罗兰是蓝色的。

打印值将如下所示:

R:1

r:3

我:1

,:1

[ECT]

到目前为止,我能够读取文件并计算单词,行,字符。

package Exercise3; import java.util.Scanner; import java.util.StringTokenizer; import java.io.*; public class StringTokenizerDemo1 { public static void main(String[] args) throws IOException { Scanner keyboard = new Scanner(System.in); File file = new File("C://Users//guy//Desktop//Practice.txt"); Scanner inputFile = new Scanner(file); String line, word; StringTokenizer token; int words = 0; //word count int lines = 0; //line count int chars = 0; //char count while (inputFile.hasNext()) { lines++; //add one to line count line = inputFile.nextLine(); token = new StringTokenizer(line, " "); while (token.hasMoreTokens()) { words++; //add one word count word = token.nextToken(); chars+= word.length(); //add to char count } } } } 

我还没有学习哈希映射/表格或树图; 寻找关于如何使用数组,arraylist或linkedlist存储所有char类型及其出现的一些建议。

char是一个16位无符号值,如果你将它转换为int ,那么你将获得一个介于0和65535之间的值。这意味着你只需使用一个数组来存储你的字符:

 int[] charCounts = new int[65536]; 

然后当你想记录char c的出现时:

 charCounts[(int) c]++; 

当您想要读取计数时:

 for (int i=0; i<65536; i++) if (charCounts[i]>0) System.out.println((char)(i)+": "+charCounts[i]); 

如果你想把它作为一个练习,没有什么可以阻止你用HashMap来做这件事,虽然它比它需要的更重要:

 HashMap map = new HashMap(); 

当你想记录char c的出现时:

 if (!map.containsKey(c)) map.put(c,1); else map.put(c,map.get(c)+1); 

当你想要阅读时:

 for (Map.Entry entry: map.entrySet()) System.out.println(entry.getKey()+": "+entry.getValue()); 

请注意,对于所有这些,我假设您只处理可打印的字符。 如果没有,当你打印出来时,你会想要做些什么。

这将计算数组中每个字符的出现次数
公共课爵士乐{

  public static void main(String[] args) { String [] arr = {"a", "b", "a","c", "d"}; HashMap map = new HashMap(); for (String i : arr) { if (map.get(i) == null) { map.put(i, 1); } else { map.put(i, map.get(i) + 1); } } 

如果您只想存储有限的nr个字符,其中某些字符是合法的而其他字符是忽略的,则可以创建一个固定大小的数组,其中char的int值表示其索引,然后增加该索引中的出现值(如chiastic-security的答案)。

使用ArrayList / LinkedList最简单的方法可能是创建一个表示char及其出现的类,然后将该对象添加到列表中。