Java文本处理4-查询文本中汉字或字符串的出现次数

1、任务简介

本节中我们需要编写一个Java程序,使得它可以查询文本中某一汉字或字符串的出现次数,并且文本和字符串可以由用户指定,我使用原版《西游记》的文本进行此次操作,具体方法如下文所述。


2、基本任务和代码

1)具体思路

(1)首先需要使用InputStreamReader类和BufferedReader类实现文本的读取,由于我使用的《西游记》为utf-8编码,所以还需要指定编码格式为utf-8;

(2)然后需要定义一个空的字符串变量,在对文本逐行读出后将读出的内容追加到该空字符串后;

(3)之后就需要使用到Pattern类和Matcher类进行字符串的匹配操作,其中Pattern类可以创建一个正则表达式,该正则表达式的内容为用户想要查询的字符串;Matcher类可以创建一个匹配器,需要匹配的内容为整个文本;

(4)最后就需要对匹配次数进行统计,这就需要使用matcher.find()方法,每次匹配均会返回一个布尔变量,若成功则为true,配合while循环就可以对出现次数进行统计;

2)任务代码

程序保存为hanzi1.java,代码如下:

import java.io.*;//导入java.io包中的所有类
import java.util.Scanner;//导入java.util包中的Scanner类
import java.util.regex.Matcher;//导入java.util.regex包中的Matcher类
import java.util.regex.Pattern;//导入java.util.regex包中的Pattern类
public class hanzi1 {//类名
    public static void main(String[] args)  {//程序主函数
        try {//try代码块,当发生异常时会转到catch代码块中
        	//读取指定的文件
        	Scanner s = new Scanner(System.in);//创建scanner,控制台会一直等待输入,直到敲回车结束
        	Scanner x = new Scanner(System.in);//创建scanner,控制台会一直等待输入,直到敲回车结束
        	System.out.println("请输入想要打开的文本文档:");//输入提示信息
        	String a = s.nextLine();//定义字符串变量,并赋值为用户输入的信息
        	System.out.println("请输入想要查询的字符(串):");//输入提示信息
	    	String b = x.nextLine();//定义字符串变量,并赋值为用户输入的信息
        	//创建类进行文件的读取,并指定编码格式为utf-8
        	InputStreamReader read = new InputStreamReader(new FileInputStream(a),"utf-8"); 
            BufferedReader in = new BufferedReader(read);//可用于读取指定文件     
			StringBuffer c = new StringBuffer();//定义一个字符串变量c,便于后续进行内容追加的操作
			String str = null;//定义一个字符串类型变量str
			int i = 0;//定义一个整型变量,用于统计字符串的出现次数
			while((str = in.readLine()) != null) {//readLine()方法, 用于读取一行,只要读取内容不为空就一直执行
				c.append(str);//将该行内容追加到字符串c的后面
			}	
			Pattern pattern = Pattern.compile(b);//创建一个正则表达式
			Matcher matcher = pattern.matcher(c);//创建一个匹配器
			while(matcher.find()) {//while循环的条件,若matcher.find()为true即匹配成功
				i++;//若匹配成功则i自增
			}
            in.close();//关闭流
            System.out.println("该字符(串)在文本中出现了"+i+"次");//输出总的出现次数
        } catch (IOException e) {//当try代码块有异常时转到catch代码块
        	e.printStackTrace();//printStackTrace()方法是打印异常信息在程序中出错的位置及原因
        }
    }
}

3)运行结果

(1)所有文件均保存在路径D:\demo4下,在命令行中对程序进行编译,然后运行程序读取路径下的txt文档,查询字符“我”,结果如下:
Java文本处理4-查询文本中汉字或字符串的出现次数
从图中可以看出我使用的原版《西游记》txt文档包含字符“我”7223次。

(2)查询字符串“八戒”,结果如下:
Java文本处理4-查询文本中汉字或字符串的出现次数
从图中可以看出我使用的原版《西游记》txt文档包含字符串“八戒”1808次。


3、总结

我使用了一些简短的测试文本对该程序进行测试,该程序可以准确的计算出所要查询的“字符串”在文本中的出现次数,所以我对该程序的准确率是充满信心的。我还可以在该任务的基础之上做一些其他的任务,对于其他任务我会在后面的博客中进行更新。