给同学写的红楼梦句长分析程序

public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请带文件后缀输入文件地址(如E:/前40回.txt)");
        String fileName = scanner.next();
        File file = new File(fileName);
        BufferedReader reader = new BufferedReader(new FileReader(file));
        StringBuilder input = new StringBuilder();
        try {
            String temp = "";
            while ((temp = reader.readLine()) != null) {
                input.append(temp);
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        HashMap<Integer, Node> map = new HashMap<Integer, Node>();
        String[] handle = input.toString().split("?”|!”|。”|[。!?]");
        for (int i = 0; i < handle.length; i++) {
            int key = handle[i].length();
            if (map.containsKey(key)) {
                map.get(key).num++;
                continue;
            }
            map.put(key, new Node(key, 1));
        }

        Object[] count = map.values().toArray();
        Arrays.sort(count);
        System.out.println("在 " + fileName + " 中:");
        for (int i = 0; i < count.length; i++) {
            Node get = (Node) count[i];
            System.out.println("句长 " + get.id + " 出现了 " + get.num + " 次");
            if (get.id == 0) {
                System.out.println("(0句长可能是文本错误引起,如输入了无意义的多余句号)");
            }
        }
        scanner.next();
        scanner.close();
    }

    static class Node implements Comparable<Node> {
        int id;
        int num;

        public Node(int id, int num) {
            this.id = id;
            this.num = num;
        }

        @Override
        public int compareTo(Node o) {
            return this.num - o.num;
        }
    }
}

运行结果:

E:/40回.txt 中:
句长 0 出现了 1 次
(0句长可能是文本错误引起,如输入了无意义的多余句号)
句长 77 出现了 1 次
句长 86 出现了 1 次
句长 88 出现了 1 次
句长 93 出现了 1 次
句长 94 出现了 1 次
句长 99 出现了 1 次
句长 102 出现了 1 次
句长 104 出现了 1 次
句长 109 出现了 1 次
句长 110 出现了 1 次
句长 111 出现了 1 次
句长 114 出现了 1 次
句长 116 出现了 1 次
句长 120 出现了 1 次
句长 122 出现了 1 次
句长 129 出现了 1 次
句长 131 出现了 1 次
句长 132 出现了 1 次
句长 133 出现了 1 次
句长 209 出现了 1 次
句长 231 出现了 1 次
句长 84 出现了 2 次
句长 91 出现了 2 次
句长 92 出现了 2 次
句长 95 出现了 2 次
句长 96 出现了 2 次
句长 103 出现了 2 次
句长 105 出现了 2 次
句长 106 出现了 2 次
句长 112 出现了 2 次
句长 115 出现了 2 次
句长 118 出现了 2 次
句长 1 出现了 3 次
句长 81 出现了 3 次
句长 87 出现了 3 次
句长 97 出现了 3 次
句长 82 出现了 4 次
句长 85 出现了 4 次
句长 90 出现了 4 次
句长 100 出现了 4 次
句长 79 出现了 5 次
句长 80 出现了 5 次
句长 83 出现了 6 次
句长 78 出现了 8 次
句长 71 出现了 9 次
句长 2 出现了 10 次
句长 68 出现了 10 次
句长 70 出现了 10 次
句长 72 出现了 10 次
句长 73 出现了 11 次
句长 75 出现了 11 次
句长 76 出现了 11 次
句长 66 出现了 12 次
句长 67 出现了 12 次
句长 69 出现了 14 次
句长 74 出现了 14 次
句长 61 出现了 17 次
句长 65 出现了 17 次
句长 63 出现了 18 次
句长 62 出现了 19 次
句长 58 出现了 20 次
句长 60 出现了 20 次
句长 3 出现了 21 次
句长 64 出现了 22 次
句长 57 出现了 25 次
句长 54 出现了 30 次
句长 56 出现了 30 次
句长 59 出现了 30 次
句长 55 出现了 35 次
句长 51 出现了 37 次
句长 53 出现了 38 次
句长 52 出现了 46 次
句长 49 出现了 51 次
句长 47 出现了 52 次
句长 48 出现了 53 次
句长 50 出现了 61 次
句长 44 出现了 70 次
句长 46 出现了 71 次
句长 45 出现了 74 次
句长 43 出现了 78 次
句长 40 出现了 92 次
句长 42 出现了 93 次
句长 5 出现了 104 次
句长 39 出现了 104 次
句长 41 出现了 104 次
句长 36 出现了 109 次
句长 4 出现了 112 次
句长 38 出现了 114 次
句长 37 出现了 118 次
句长 34 出现了 142 次
句长 35 出现了 142 次
句长 33 出现了 158 次
句长 32 出现了 161 次
句长 6 出现了 178 次
句长 31 出现了 198 次
句长 29 出现了 212 次
句长 30 出现了 213 次
句长 8 出现了 222 次
句长 28 出现了 224 次
句长 27 出现了 247 次
句长 7 出现了 252 次
句长 25 出现了 276 次
句长 26 出现了 290 次
句长 23 出现了 298 次
句长 24 出现了 313 次
句长 22 出现了 318 次
句长 14 出现了 344 次
句长 21 出现了 344 次
句长 19 出现了 353 次
句长 10 出现了 360 次
句长 16 出现了 360 次
句长 20 出现了 364 次
句长 12 出现了 368 次
句长 17 出现了 370 次
句长 9 出现了 372 次
句长 18 出现了 381 次
句长 13 出现了 387 次
句长 11 出现了 460 次
句长 15 出现了 496

看到一个句子那么长我还以为出bug了,原来还真有:

那宝玉本就懒与士大夫诸男人接谈,又最厌峨冠礼服、贺吊往还等事,今日得了这句话,越发得了意,不但将亲戚朋友一概杜绝了,而且连家庭中晨昏定省亦发都随他的便了;日日只在园中游卧,不过每日一清早到贾母、王夫人处走走就回来了,却每每甘心为诸丫鬟充役,竟也得十分闲消日月。

猜你喜欢

转载自blog.csdn.net/cymbals/article/details/80146261