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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

linhui

初级黑马

  • 黑马币:18

  • 帖子:8

  • 精华:0

本帖最后由 linhui 于 2016-9-19 13:46 编辑

题目是:一个文本中存放着某高校的学生名单,每一行一个名字,姓与名之间用空格隔开。现在需要统计所有姓氏在文本中出现的次数。
我的解决方法是:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

public class TestCount {
        public static void main(String[] args) {
                TreeMap<String, Integer> map = new TreeMap<>();
                BufferedReader br = null;
                try {
                        br = new BufferedReader(new FileReader(new File("d:/name.txt")));
                        String value = null; // 临时接收文件中的字符串变量
                        StringBuffer buffer = new StringBuffer();
                        flag: while ((value = br.readLine()) != null) { // 开始读取文件中的字符
                                char[] c = value.toCharArray();
                                for (int i = 0; i < c.length; i++) {
                                        if (c != ' ') {
                                                buffer.append(String.valueOf(c));
                                        } else {
                                                // System.out.println(buffer);
                                                if (map.containsKey(buffer.toString())) {
                                                        int conut = map.get(buffer.toString());
                                                        map.put(buffer.toString(), conut + 1);
                                                } else {
                                                        map.put(buffer.toString(), 1);
                                                }
                                                buffer.delete(0, buffer.length());
                                                continue flag;
                                        }
                                }
                        }
                } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } finally {
                        if (br != null) {
                                try {
                                        br.close();
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                        }
                }
                Set<Map.Entry<String, Integer>> set = map.entrySet();
                Iterator<Map.Entry<String, Integer>> it = set.iterator();
                while (it.hasNext()) {
                        Map.Entry<String, Integer> end = (Entry<String, Integer>) it.next();
                        System.out.println(end);
                }
        }
}

我测试的文本文件内容如下:
张 三
李 四
王 五
赵 六
陈 七
张 三
欧阳 十
张 三
李 四
王 五
张 五
赵 六
陈 七
张 八
欧阳 十

但是会出现一个问题,就是第一行的那个“张”,和下面的重复出现的 ”张“ 不一样,这到底是啥原因导致的?

这是我控制台输出的结果:
张=4
李=2
欧阳=2
王=2
赵=2
陈=2
张=1

1 个回复

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