A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1716976987 初级黑马   /  2018-4-10 08:41  /  1233 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


统计当前项目下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();
}

}
谢谢。不吝指教

1 个回复

倒序浏览
加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马