• 中文
    • 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.1k
    • 请登录之后再进行评论

      登录

      赞助本站

      • 支付宝
      • 微信
      • QQ

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

      单栏布局 侧栏位置: