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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 温晓慧 中级黑马   /  2015-1-25 23:35  /  3900 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

额。。。我统计的时候总是出现——空格:260次等等,还有一个是很奇怪的?多少次。
这两个如何避免呢?不统计空格和那个很奇怪的“?”,这个奇怪的“?”是啥呢?
  1. package otherExam2;

  2. import java.io.*;
  3. import java.util.Iterator;
  4. import java.util.TreeMap;

  5. /*
  6. * 5、 统计一个文本文件中字符出现的次数,结果存入另外的一个文本文件中。例如:

  7.     a:  21 次
  8.     b:  15 次
  9.     c: 15 次
  10.         把:  7 次
  11.         当:  9 次
  12.         前:  3 次
  13.         ,:30 次
  14. * */
  15. public class Exam2 {
  16.         public static void main(String[] args) throws Exception {
  17.                 BufferedReader bufr =new BufferedReader(new FileReader("D:\\I08\\IODemo.java"));
  18.                 BufferedWriter bufw = new BufferedWriter(new PrintWriter("D:\\IO8\\exam.txt"));
  19.                 String str =null;
  20.                 //读取文件信息
  21.                 //定义一个TreeMap,键是字符类型,值是整数类型
  22.                 TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
  23.                 while((str=bufr.readLine() )!= null)
  24.                 {
  25.                         //将读取的字符串转成字符数组
  26.                         char[] arry =str.toCharArray();
  27.                         //开始先将读取到的字符作为键存储到treemap中
  28.                         for(char c:arry)
  29.                         {
  30.                                 //如果不含有这个键,则添加1
  31.                                 if(!(tm.containsKey(c)))
  32.                                 {
  33.                                         tm.put(c, 1);
  34.                                 }
  35.                                 //如果有将值+1,再重新覆盖
  36.                                 else{
  37.                                         int value =(tm.get(c))+1;
  38.                                         tm.put(c, value);
  39.                                 }
  40.                         }
  41.                 }
  42.                 //遍历TreeMap,存入另一个文件中
  43.                 Iterator<Character> it =tm.keySet().iterator();
  44.                 while(it.hasNext())
  45.                 {
  46.                         char d =it.next();
  47.                         Integer num =tm.get(d);
  48.                         System.out.println(d+":"+num);
  49.                         bufw.write(d+":"+num);
  50.                         bufw.newLine();
  51.                 }
  52.                        
  53.                        
  54.                 bufw.flush();
  55.                 bufw.close();
  56.                 bufr.close();
  57.                
  58.         }
  59.        
  60.         }
复制代码

11 个回复

倒序浏览
空格是一种,还有一种是制表符,由Tab键形成的。?号肯定是你里面有这个东西,不然不会统计的。去掉这几种统计的,就在你添加之前进行判断就好了。
  1.   for(char c:arry)
  2.                         {
  3.                                                         if(c == ' ' || c == '        ' || c == '?')
  4.                                                         continue;
  5.                                                         //如果不含有这个键,则添加1
  6.                                                         if(!(tm.containsKey(c)))
  7.                                                         {
  8.                                                                         tm.put(c, 1);
  9.                                                         }
  10.                                                         //如果有将值+1,再重新覆盖
  11.                                                         else{
  12.                                                                         int value =(tm.get(c))+1;
  13.                                                                         tm.put(c, value);
  14.                                                         }
  15.                         }
复制代码
回复 使用道具 举报 1 0
邓士林 发表于 2015-1-26 10:06
空格是一种,还有一种是制表符,由Tab键形成的。?号肯定是你里面有这个东西,不然不会统计的。去掉这几种统 ...

哦哦。。。这样子,但是我肯定我文本里没有问号。。。真的。。。我发誓。。。。
回复 使用道具 举报
温晓慧 发表于 2015-1-26 10:09
哦哦。。。这样子,但是我肯定我文本里没有问号。。。真的。。。我发誓。。。。 ...

把你的文件上传,我给你测试
回复 使用道具 举报
邓士林 发表于 2015-1-26 10:11
把你的文件上传,我给你测试

麻烦你了!!!!谢谢嘿嘿

Desktop.rar

1.01 KB, 下载次数: 311

回复 使用道具 举报
确实出现了?,我看了下数据,是数据的问题,是由于数据最后一个字符导致的,这个字符是两倍的空格,统计的时候它不属于空格,又不是制表符,就是它,显示的是?,具体这个符号是什么,我还没找到。我以为是输入法导致的,切换了还是没有找到这个东西。

aa.png (33.66 KB, 下载次数: 218)

aa.png

bb.png (30.24 KB, 下载次数: 151)

bb.png
回复 使用道具 举报 1 0
邓士林 发表于 2015-1-26 11:08
确实出现了?,我看了下数据,是数据的问题,是由于数据最后一个字符导致的,这个字符是两倍的空格,统计的 ...

啊。。。。明白了。。。太谢谢你了。你报的哪一期班?
回复 使用道具 举报
温晓慧 发表于 2015-1-26 11:10
啊。。。。明白了。。。太谢谢你了。你报的哪一期班?

我没报班
回复 使用道具 举报

啊!!!那你是做编程的么?这次真是碰到大神了
回复 使用道具 举报
文本文件里出现中文字符了怎么办?
回复 使用道具 举报
  1. package come.heima.fuxi;

  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileReader;
  6. import java.io.FileWriter;
  7. import java.util.HashMap;

  8. public class Demo3 {

  9.         /**
  10.          * 统计一个文本文件中出现的字符次数,结果存到另外一个文本中.
  11.          */
  12.         public static void main(String[] args) throws Exception {
  13.                 BufferedReader br = new BufferedReader(new FileReader("a.txt"));
  14.                 BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
  15.                 HashMap<Character, Integer> hm = new HashMap<>();
  16.                 String len;
  17.                 while((len = br.readLine())!= null){
  18.                         char[] ch = len.toCharArray();
  19.                         for (char c : ch) {
  20.                                 if(!hm.containsKey(c)){
  21.                                         hm.put(c, 1);
  22.                                 }else{
  23.                                         hm.put(c, (hm.get(c)+1));
  24.                                 }                               
  25.                         }                       
  26.                 }
  27.                 for (Character c1 : hm.keySet()) {
  28.                         Integer sum  = hm.get(c1);
  29.                         bw.write(c1.toString() + sum + "次");
  30.                         bw.newLine();
  31.                 }               
  32.                 br.close();
  33.                 bw.close();       
  34.         }

  35.        

  36. }
复制代码

我们群有人吧这题晒出来了,正好看见了,赚点金币学习下
回复 使用道具 举报
学到了  谢谢大神
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马