Java文本处理10-计算文本平均句长

1、任务简介

本节任务是计算文本平均句长,可以再上一节任务《Java文本处理9-计算文本句子数》的基础上来进行,并且还需要使用到《Java文本处理3-统计文本行数、字符数、汉字、数字、字母数等》里面关于计算文本总字数的相关方法。


2、基本任务和代码

1)具体思路

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

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

(3)逐行读出文档,然后使用for循环对该行中的每一个字符进行遍历,使用toString()方法得到每一个字符,再使用if语句和matches()方法检测字符是否为汉字,若匹配则对指定的变量进行自增,求出总的汉字数;

(4)再使用if语句和equals()方法字符是否为“。” “!”和“?”三种符号之一,若为其中之一则句子数+1,由于计算平均句长需要使用总汉字数\总句子数,即需要使用到除法,故统计变量均需要使用double型变量;

(5)使用总汉字数\总句子数就可以得到该文本中每一句话的平均句长,并将结果打印出来(打印总汉字数和总句子数时强制类型转换为int型即可);

2)任务代码

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

import java.io.*;//导入java.io包中的所有类
import java.util.Scanner;//导入java.util包中的Scanner类
public class juzi2 {//类名
    public static void main(String[] args)  {//程序主函数
        try {//try代码块,当发生异常时会转到catch代码块中
        	//读取指定的文件
        	Scanner s = new Scanner(System.in);//创建scanner,控制台会一直等待输入,直到敲回车结束
        	System.out.println("请输入想要打开的文本文档:");//输入提示信息
        	String a = s.nextLine();//定义字符串变量,并赋值为用户输入的信息
        	//创建类进行文件的读取,并指定编码格式为utf-8
        	InputStreamReader read = new InputStreamReader(new FileInputStream(a),"utf-8"); 
            BufferedReader in = new BufferedReader(read);//可用于读取指定文件     
			StringBuffer b = new StringBuffer();//定义一个字符串变量b,便于后续进行内容追加的操作
			String str = null;//定义一个字符串类型变量
			String d = null;//定义一个字符串类型变量
			double e = 0;//定义一个double型变量,用于统计句子数
			double c = 0;//定义一个double型变量,用于统计汉字数
			while((str = in.readLine()) != null) {//readLine()方法, 用于读取一行,只要读取内容不为空就一直执行
				b.append(str);//将该行内容追加到字符串b的后面
				for (int j = 0; j < str.length(); j++) {//for循环的条件,当j小于该行长度时就一直循环并自增
            		d = Character.toString(str.charAt(j));//返回一个字符串对象
            		if (d.matches("[\\u4e00-\\u9fa5]")) {//if语句的条件,判断是否为汉字
                        c++;//若为汉字则c自增一次
                    }
            		if (d.equals("。")||d.equals("?")||d.equals("!")) {//if语句的条件,判断是否为句子
                        e++;//若为一句则e自增一次
                    }
			    }
			}
            in.close();//关闭流
            double f = c/e;//计算文本平均句长
            System.out.println("该文本共有"+(int)e+"个句子");//输出总的句子数
            System.out.println("该文本共有"+(int)c+"个汉字");//输出总的汉字数
            System.out.println("该文本平均句长为"+f);//输出平均句长
        } catch (IOException e) {//当try代码块有异常时转到catch代码块
        	e.printStackTrace();//printStackTrace()方法是打印异常信息在程序中出错的位置及原因
        }
    }
}

3)运行结果

(1)所有文件均保存在路径D:\demo7下,首先对一个简单的文本文档(格式为utf-8)的句子数进行计算,该文本文档命名为 lsy.txt(该文档在上一节任务中已有使用),内容如下:
Java文本处理10-计算文本平均句长_第1张图片
在命令行中对程序进行编译,并运行程序读取该txt文档,计算结果如下:
Java文本处理10-计算文本平均句长_第2张图片

由此可以看出对于该文本的计算结果与实际相符;

(2)最后在命令行下使用该程序对原版《西游记》txt文档进行计算,计算结果如下:
Java文本处理10-计算文本平均句长_第3张图片
对于我使用的原版《西游记》总汉字数的计算结果为589702个,总句子数为30804个,进行除法运算后可以得出其平均句长约为19.143682638618362。


3、总结

通过该程序我们可以在计算得出文本总汉字数和总句子数的基础上,再通过除法运算得出平均句长,错误之处还请大家指正,博主对此不胜感激。

你可能感兴趣的:(Java)