统计多个文件中单词的个数

统计5个文件中,每一个单词出现的总次数

统计多个文件中单词的个数_第1张图片
如图,文件里面有换行也有Tab

1. 使用IO流

package com;

import java.io.*;
import java.util.*;

/**
 * 使用IO流
 */
public class Test1 {
    //用key来存单词,Integer来存单词出现次数,map最合适不过
    static Map<String, Integer> map = new HashMap<>();

    public static void main(String[] args) {
        getNum("F:/test/1.txt");
        getNum("F:/test/2.txt");
        getNum("F:/test/3.txt");
        getNum("F:/test/4.txt");
        getNum("F:/test/5.txt");
        System.out.println("统计结果为:");
        //迭代输出
        Iterator<String> it = map.keySet().iterator();
        while (it.hasNext()) {
            String s = it.next();
            System.out.println("单词:" + s + " 出现的次数为:" + map.get(s));
        }
    }

    public static void getNum(String path) {
        BufferedReader br = null;
        System.out.println(path.substring(path.lastIndexOf("/") + 1) + "中的内容");//取到文件名
        try {
            br = new BufferedReader(new FileReader(path));//读取文件
            /*BufferedReader中的readLine方法是读取一行。在读到最后一行,
              也就是空行的时候会输出null,只有这样使用才能得到完整的一行*/
            String s = null;
            while ((s = br.readLine()) != null) {
                System.out.println(s);
                /*split按给的正则表达式进行分割\W匹配非单词字符,\w表示匹配单词字符
                注意这里的单词字符指的是字母、数字、下划线、汉字并不是指一个英文单词*/
                String arr[] = s.split("\\W");
                //map里面的key值是唯一的,可以帮我们去除,所以这里不用担心重复单词的问题
                for (int i = 0; i < arr.length; i++) {
                    //如果这个key值存在,把value(出现次数)值给count
                    if (map.containsKey(arr[i])) {
                        int count = map.get(arr[i]);
                        count++;
                        map.put(arr[i], count);
                    } else
                        map.put(arr[i], 1);//不存在,默认为一次
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.使用Scanner类

package com;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

/**
 * 使用Scanner类
 */

public class Test2 {
    //用key来存单词,Integer来存单词出现次数,map最合适不过
    static Map<String, Integer> map = new HashMap<>();

    public static void main(String[] args) {
        getNum("F:/test/1.txt");
        getNum("F:/test/2.txt");
        getNum("F:/test/3.txt");
        getNum("F:/test/4.txt");
        getNum("F:/test/5.txt");
        System.out.println("统计结果为:");
        //迭代输出
        Iterator<String> it = map.keySet().iterator();
        while (it.hasNext()) {
            String s = it.next();
            System.out.println("单词:" + s + " 出现的次数为:" + map.get(s));
        }
    }

    public static void getNum(String path) {
        Scanner input = null;
        System.out.println(path.substring(path.lastIndexOf("/") + 1));
        try {
            input = new Scanner(new File(path));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //Scnner对比IO流就比较方便了,它里面直接有一个hasNextLine判断是否存在下一行
        while (input.hasNextLine()) {
            String s = input.nextLine();
            System.out.println(s);
                /*split按给的正则表达式进行分割\W匹配非单词字符,\w表示匹配单词字符
                注意这里的单词字符指的是字母、数字、下划线、汉字并不是指一个英文单词*/
            String arr[] = s.split("\\W");
            //map里面的key值是唯一的,可以帮我们去除,所以这里不用担心重复单词的问题
            for (int i = 0; i < arr.length; i++) {
                //如果这个key值存在,把value(出现次数)值给count
                if (map.containsKey(arr[i])) {
                    int count = map.get(arr[i]);
                    count++;
                    map.put(arr[i], count);
                } else
                    map.put(arr[i], 1);//不存在,默认为一次
            }
        }
    }

}

统计多个文件中单词的个数_第2张图片

你可能感兴趣的:(统计单词个数,javaSE)