java 读入文本并统计其中重复字符个数,字符总数等(1.3)
用到的类
1. TreeMap类
2. BufferedReader类
3. FileReader类
博主解决的问题,从固定路径获取文件,并对文件中的内容、行数、总的字符和重复字符的计数进行输出。
1.FileReader类
此处仅针对本练习分析类,FileReader和FileWriter字符流对应了FileInputStream和FileOutputStream类。FileReader流顺序的读取文件,只要不关闭流,每次调用read()方法就顺序地读取源中其余内容,直到源的末尾或源关闭。博主直接读取根路径获取文件内容:
br = new BufferedReader(new FileReader("G:\\BIT\\工程训练\\test.txt")); //根据路径获取文本
2.BufferedReader类
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,
BufferedReader in = new BufferedReader(new FileReader("in.txt"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。BufferedReader 类常用方法:
方 法 | 功 能 描 述 |
---|---|
read() | 读取单个字符 |
readLine() | 读取一个文本行,并返回为字符串。如无数据,返回NULL |
write(String s,int off,int len) | 写入字符串的某一部分 |
flush() | 刷新该流的缓存 |
newLine() | 写入一个行分隔符 |
目标代码中使用:
try {
br = new BufferedReader(new FileReader("G:\\BIT\\工程训练\\test.txt")); //根据路径获取文本
while((str = br.readLine())!= null) { //读入文本行及其内容
sb.append(str); //添加字符串到缓冲字符串流sb中
++line; //统计行数
}
System.out.println("文件行数:"+line); //输出行数
System.out.println("文件内容:"+ sb.toString()); //输出文本内容
3.Map接口
以下是Map接口的常用方法:
方 法 | 功 能 描 述 |
---|---|
put(K key,V value) | 向集合中添加指定的key和value的映射关系 |
containKey(Object Key) | 若此映射包含指定key的映射关系,则返回true |
containValue(Object Value) | 若此映射包含指定的键值,则返回true |
get(Object Key) | 若存在指定的key对象,则返回该对象对应的值,否则返回null |
keySet() | 返回对象中所有key对象形成的Set集合 |
values() | 返回集合中所有值对象形成的collection集合 |
Map接口常用类有HashMap和TreeMap。HashMap类基于哈希表的Map接口实现,不保证映射的顺序;TreeMap不仅实现了Map接口,还实现了java.util.SortedMap接口,映射有一定的顺序,具体区别可参见附件中第一个网盘链接代码。该接口在目标代码中运用如下:
TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>(); //创建TreeMap集合对象
for(int x=0;x<charArray.length;x++) { //循环遍历所有的字符和数字
if(!tm.containsKey(charArray[x])) { //判断是否包含charArray[x]的映射关系
tm.put(charArray[x], 1); //添加字符与统计量1对应
}else {
int count = tm.get(charArray[x])+1; //统计量增加
tm.put(charArray[x],count);
}
4 总结
(1)在”G:\BIT\工程训练\”根目录下新建text.txt文件,随便输入字符串
(2)编写代码:参看附件网盘地址第二个链接
(3)结果:
HashMap和TreeMap区别,代码参考:
链接:https://pan.baidu.com/s/1WAdJ74Oz1CKUeI0on2lXbg 密码:a8si
目标代码参考:
链接:https://pan.baidu.com/s/1SZ8KLIAaiglTW-C4uS9Bxw 密码:zag3