统计当前项目下info2.txt文件中, 每个字符出现的个数
文件内容如下:
welcometo itheima!!!
最终效果如下:
w(1)(2)!(3)t(2)e(3)c(1)a(1)o(2)l(1)m(2)h(1)i(2)
分析:
1. 创建HashMap集合, 用于统计每个字符出现的次数
2. 创建输入流对象关联数据源
3. 读取到文件中的每一个字符
4. 判断字符是否是第一次出现
a) 如果是的话, 键的位置存当前字符, 值的位置存1 如果不是第一次出现, 键的位置还是当前字符, 值的位置需要将原本记录的值
干货代码:
package com.itheima04;
/*统计当前项目下info2.txt文件中, 每个字符出现的个数
文件内容如下:
welcome to itheima!!!
最终效果如下:
w(1) (2)!(3)t(2)e(3)c(1)a(1)o(2)l(1)m(2)h(1)i(2)
2.2. 作步骤描述
1. 创建HashMap集合, 用于统计每个字符出现的次数
2. 创建输入流对象关联数据源
3. 读取到文件中的每一个字符
4. 判断字符是否是第一次出现
a) 如果是的话, 键的位置存当前字符, 值的位置存1
b) 如果不是第一次出现, 键的位置还是当前字符, 值的位置需要将原本记录的值取出, 然后+1存储
5. 创建字符串缓冲区(StringBuilder), 用于拼接结果
6. 将数据从集合中取出, 并拼接
7. 创建输出流对象
8. 调用write方法写出数据
9. 关闭流释放资源*/
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Set;
public class Demo {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("info2.txt");
FileOutputStream fos = new FileOutputStream("b.txt");
HashMap<Character, Integer> hm = new HashMap<>();
int a;
while ((a = fis.read()) != -1) {
Character key = (char) a;
if (!hm.containsKey(key)) {
hm.put(key, 1);
} else {
hm.put(key, hm.get(key) + 1);
}
}
StringBuilder sb = new StringBuilder();
Set<Character> keySet = hm.keySet();
for (Character ch : keySet) {
sb.append(ch).append("(").append(hm.get(ch)).append(")");
}
String s = sb.toString();
fos.write(s.getBytes());
fos.close();
fis.close();
}
}
谢谢。不吝指教
|