2020.11.5收获
Java文本处理3-统计文本行数、字符数、汉字、数字、字母数等
1、任务简介
本节中我们需要编写一个Java程序,使得它可以统计文本行数、字符数、字节数、汉字、数字、字母及其它符号的数量。本文分为两个程序进行讲解,第一个程序首先实现文本行数、字符数及字节数的统计,然后在第一个程序的基础上实现第二个程序,第二个程序在包含第一个程序功能的基础上实现对汉字、数字、字母的统计。
2、基本任务和代码
(1)任务1
1)任务内容
实现文本行数、字符数及字节数的统计。
2)具体思路
(1)首先需要使用InputStreamReader类和BufferedReader类实现文本的读取,由于我使用的《西游记》为utf-8编码,所以还需要指定编码格式为utf-8;
(2)逐行读出文档,然后定义整型变量 i 初始值为0,并在每一次循环后自增,最后可以得出总行数;
(3)逐行读出文档,将每一行的字符串长度str.length()求出,并定义整形变量 c 初始值为0,每一次循环中都进行c = c+str.length()操作,循环结束后可以求出总的字符数;
(4)逐行读出文档,求出每一行的字节数组,然后采用与(3)中相同的方式求出总的字节数;
3)任务代码
程序保存为tongji1,代码如下:
import java.io.*;//导入java.io包中的所有类
import java.util.Scanner;//导入java.util包中的Scanner类
public class tongji1 {//类名
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);//可用于读取指定文件
String str=null;//定义一个字符串类型变量str
int i = 0;//定义一个整型变量,用于统计行数
int c = 0;//定义一个整型变量,用于统计字符数
int d = 0;//定义一个整型变量,用于统计字节数
while ((str = in.readLine())!= null) {//readLine()方法, 用于读取一行,只要读取内容不为空就一直执行
i++;//每循环一次就进行一次自增,用于统计文本行数
c += str.length();//用于统计总字符数
byte[] bytes=str.getBytes();//求出该行的字节数组
d += bytes.length;//用于统计总字节数
}
in.close();//关闭流
System.out.println("该文本共有"+i+"行");//输出总的行数
System.out.println("该文本共有"+c+"个字符");//输出总的字符数
System.out.println("该文本共有"+d+"个字节");//输出总的字节数
} catch (IOException e) {//当try代码块有异常时转到catch代码块
e.printStackTrace();//printStackTrace()方法是打印异常信息在程序中出错的位置及原因
}
}
}
4)运行结果
所有文件均保存在路径D:\demo3下,在命令行中对程序进行编译,然后运行程序读取路径下的txt文档,结果如下:
(2)任务2
1)任务内容
在任务1的基础上,利用matches()方法匹配正则表达式,从而实现对汉字、数字、字母的数量统计。
2)具体思路
(1)由于是在任务1基础上编写的程序,那么就可以直接套用任务1的知识了,具体如下:
a、首先需要使用InputStreamReader类和BufferedReader类实现文本的读取,由于我使用的《西游记》为utf-8编码,所以还需要指定编码格式为utf-8;
b、逐行读出文档,然后定义整型变量 i 初始值为0,并在每一次循环后自增,最后可以得出总行数;
c、逐行读出文档,将每一行的字符串长度str.length()求出,并定义整形变量 c 初始值为0,每一次循环中都进行c = c+str.length()操作,循环结束后可以求出总的字符数;
d、逐行读出文档,求出每一行的字节数组,然后采用与上一步相同的方式求出总的字节数;
(2)逐行读出文档,然后使用for循环对该行中的每一个字符进行遍历,使用toString()方法得到每一个字符;
(3)使用if语句和matches()方法检测字符是否与正则表达式相匹配,若匹配则对指定的整型变量进行自增,最后打印出每一项的数量;
3)任务代码
程序保存为tongji2,代码如下:
import java.io.*;//导入java.io包中的所有类
import java.util.Scanner;//导入java.util包中的Scanner类
public class tongji2 {//类名
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);//可用于读取指定文件
String str=null;//定义一个字符串类型变量str
String b=null;//定义一个字符串类型变量b
int i = 0;//定义一个整型变量,用于统计行数
int c = 0,c1 = 0,c2 = 0,c3 = 0,c4 = 0,c5 = 0,c6 = 0;//定义整型变量,用于统计字符数
int d = 0;//定义一个整型变量,用于统计字节数
while ((str = in.readLine())!= null) {//readLine()方法, 用于读取一行,只要读取内容不为空就一直执行
i++;//每循环一次就进行一次自增,用于统计文本行数
c += str.length();//用于统计总字符数
byte[] bytes=str.getBytes();//求出该行的字节数组
d += bytes.length;//用于统计总字节数
for (int j = 0; j < str.length(); j++) {//for循环的条件,当j小于该行长度时就一直循环并自增
b = Character.toString(str.charAt(j));//返回一个字符串对象
if (b.matches("[\\u4e00-\\u9fa5]")) {//if语句的条件,判断是否为汉字
c1++;//若为汉字则c1自增
} else if(b.matches("[A-Z]")){//if语句的条件,判断是否为大写字母
c2++;//若为大写字母则c2自增
} else if(b.matches("[a-z]")){//if语句的条件,判断是否为小写字母
c3++;//若为小写字母则c3自增
} else if(b.matches("[0-9]")){//if语句的条件,判断是否为数字
c4++;//若为数字则c4自增
} else {//否则可判断为其他字符
c5++;//若为其他字符则c5自增
}
}
}
c6 = c2 + c3;//统计总的字母数
in.close();//关闭流
System.out.println("该文本共有"+i+"行");//输出总的行数
System.out.println("该文本共有"+c+"个字符");//输出总的字符数
System.out.println("其中包含:");//输出提示信息
System.out.println(c1+"个汉字");//输出汉字数
System.out.println(c6+"个字母,其中"+c2+"个大写字母,"+c3+"个小写字母");//输出字母数
System.out.println(c4+"个数字");//输出数字数
System.out.println(c5+"个其他字符");//输出其它字符数
System.out.println("该文本共有"+d+"个字节");//输出总的字节数
} catch (IOException e) {//当try代码块有异常时转到catch代码块
e.printStackTrace();//printStackTrace()方法是打印异常信息在程序中出错的位置及原因
}
}
}
4)运行结果
所有文件均保存在路径D:\demo3下,在命令行中对程序进行编译,然后运行程序读取路径下的txt文档,结果如下:
转载至:https://blog.csdn.net/lsylsy726/article/details/86650722