• 中文
    • English
  • 注册
  • 查看作者
  • 如何用Java统计计算一篇文档资料中单词的个数以及汉字个数

    一.  前言

    今天和基友一起讨论了Java中关于统计单词的一个题目,记录如下:

    题目要求:统计一篇文档资料中单词的个数(提示:文档资料放在字符串中)

    二.  统计单词

    首先,我们获取要读取单词个数的文件

    File file = new File("F:\\a\\a.txt");

    实例化操作流

    Reader reader = new FileReader(file);

    将文件中的所有内容打印输出

    char[] cbuf = new char[32];
    int len = 0;
    StringBuilder sb = new StringBuilder();
    while ((len = reader.read(cbuf)) != -1) {
    String str = new String(cbuf, 0, len);
    sb.append(str);
    }
    reader.close();
    System.out.println("本文件所有内容为:\n" + sb);

    将StringBuilder转换为String

    String str = sb.toString().toLowerCase();

    接下来,通过正则表达式,计算str中一共有多少个单词

    String[] arr = str.split("\\S+");//\\s表示 空格,回车,换行等空白符
    System.out.println("本文一共" + arr.length + "个单词");

    最后实现如下:

    package tv.zhangjia.tv;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.Reader;
    
    public class Test {
    	public static void main(String[] args) {
    		try {
    			File file = new File("F:\\a\\a.txt");
    			Reader reader = new FileReader(file);
    			char[] cbuf = new char[32];
    			int len = 0;
    			StringBuilder sb = new StringBuilder();
    			while ((len = reader.read(cbuf)) != -1) {
    				String str = new String(cbuf, 0, len);
    				sb.append(str);
    			}
    			reader.close();
    			System.out.println("本文件所有内容为:\n" + sb);
    			String str = sb.toString().toLowerCase();
    			String[] arr = str.split("\\S+");
    			System.out.println("本文一共" + arr.length + "个单词");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }

    做到这一步,我和基友又在想,现在只能统计单词,而且是通过空格和回车来统计个数的,那么我们如何统计一个文件中,中文的字数呢?

    三.  统计汉字

    首先,将String转换为char

    char[] ch = str.toCharArray();

    接下来,通过正则表达式统计汉字个数,我们可以将正则表达式设置为:

    [\\u4E00-\\u9FA5]+
    //意义如下:
    //至少匹配一个汉字的写法
    //这两个unicode值正好是Unicode表中的汉字的头和尾。
    //"[]"代表里边的值出现一个就可以,后边的“+”代表至少出现1次,合起来即至少匹配一个汉字。

    我们可以通过java.lang.Character.toString(char c) 方法返回表示指定字符的String对象

    其结果是一个长度为1的指定字符组成的纯粹的字符串。

    然后通过public boolean matches(String regex)方法告知此字符串是否匹配给定的正则表达式。

    char[] ch = str.toCharArray();
    int count = 0;
    for (int i = 0; i < ch.length; i++) {
    if (Character.toString(ch[i]).matches("[\\u4E00-\\u9FA5]+")) {
    count++;
    
    }
    System.out.println("其中" + count + "个汉字");

    最后实现如下:

    package tv.zhangjia.tv;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.Reader;
    
    public class DateFormatTest2 {
    	public static void main(String[] args) {
    		try {
    			File file = new File("F:\\a\\a.txt");
    			Reader reader = new FileReader(file);
    			char[] cbuf = new char[32];
    			int len = 0;
    			StringBuilder sb = new StringBuilder();
    			while ((len = reader.read(cbuf)) != -1) {
    				String str = new String(cbuf, 0, len);
    				sb.append(str);
    			}
    			reader.close();
    			System.out.println("本文件所有内容为:\n" + sb);
    			String str = sb.toString().toLowerCase();
    			char[] ch = str.toCharArray();
    			int count = 0;
    			for (int i = 0; i < ch.length; i++) {
    				if (Character.toString(ch[i]).matches("[\\u4E00-\\u9FA5]+")) {
    					count++;
    
    				}
    			}
    			System.out.println("其中" + count + "个汉字");
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }

     

  • 0
  • 0
  • 0
  • 6.3k
  • 请登录之后再进行评论

    登录

    赞助本站

    • 支付宝
    • 微信
    • QQ

    感谢一直支持本站的所有人!

    单栏布局 侧栏位置: