此小程序使用最基本的方法来统计文本中英文单词的个数,想法也比较简单: (1)从文本中文本读取内容,使用BufferedReader类每次读取一行并添加到StringBuffer类型变量中, 最后StringBuffer类型变量即为文本的内容,如StringBuffer sb; (2)把sb的内容全部转化成小写字母(或大写字母); (3)统计文件中各种标点符号个数; (4)把所有标点符号统一替换成一种标点符号,如替换成逗号 (5)替换后的文本使用字符串的分割函数来获取返回的字符串数组的长度,此长度即为文件中单词的总个数
代码如下;
import java.io.*;
public class WordsCount {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new FileReader("e:/a.txt"));
StringBuffer sb = new StringBuffer();
String line;
while((line = br.readLine()) != null)
{
sb.append(line);//把每次读取的一行数据附加到sb中
sb.append("\n");//每读取一行加入换行符
}
System.out.print("原文件内容:\n"+sb);//打印目前的文章即字符串sb的内容
br.close();//关闭文件流
String s = sb.toString().toLowerCase();//把sb转化成小写复制给字符串s
System.out.print("字母转化成小写后文件内容:\n"+s);//打印当前文章即字符串s的内容
int countCh = 0;//统计文件中字符个数
StringBuffer c = new StringBuffer();//存储文件中字符个数
for(int i=0;i<s.length();i++)
{
char ch = s.charAt(i);//获取文件中每一个字符并赋给字符ch
if(!(ch >= 'a' && ch <= 'z'))
{
c.append(ch);//把获取的字符一次附加到c中
countCh ++;
}
}
int space = 0,qm = 0,comma = 0,excl = 0,other = 0;//question mark问号 comma 逗号 exclamation 叹号
for(int i=0;i<c.length();i++)
if(c.charAt(i) == ' ')
space ++;
else if(c.charAt(i) == '?')
qm ++;
else if((c.charAt(i) == '!'))
excl ++;
else if((c.charAt(i) == ','))
comma ++;
else
other ++;
String temp = "";
if(countCh>=0)
{
/*
(1)把所有标点符号替换成逗号之后的文件内容赋给临时字符串temp,假设本文件只有,? !等几种标点.
(2)替换情况可以实际情况出现的标点而改变,注意最后两个个替换!!一是考虑到派生词如warm-hearted为一个词的情况
可以把-替换成26个小写字母中的任意一个,从而保证派生词记为一个单词;二就是缩写词,应该把‘替换成为分隔符,
替换时注意使用转义字符的使用,从而保证缩写词记为一个单词
*/
temp = s.trim().replace(' ', ',').replace('.',',').replace('!',',').replace('?',',')
.replace('(',',').replace(')',',').replace('-','a').replace('\'',',');
System.out.println("\n替换成逗号之后的文件内容:\n"+temp+"\n");
String[] data = temp.split(",");
System.out.println("空格总个数: "+space+" 问号总个数:"+qm
+" 叹号总个数: "+excl+" 逗号总个数:"+comma+" 其他标点个数: "+other);//打印出空格总个数
System.out.println("\n单词的总个数为:"+data.length);
}
}
}
运行结果: