一. 前言
今天和基友一起讨论了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(); } } }
请登录之后再进行评论