因为业务需求,需要一个字数统计的功能,其实这个功能也不难,但是因为这边涉及到中文,英文,
日文和韩文的混合文本,所以不能用一般的统计方法,在网上搜索了一些,
然后综合了一下自己写了个支持混合统计的工具类
直接上代码
/**
* 字数统计
* @param sContent 正文内容
* @return
*/
public static Integer wordCount(String sContent){
int byteCount = 0;
//中文字符的处理
String cn_words = sContent.replaceAll("[^(\\u4e00-\\u9fa5\\x3130-\\x318F\\u0800-\\u4e00,。《》?;’‘:“”【】、)(……¥!·)]", "");
int cn_word_count = cn_words.length();
//英文字符的处理
String en_words = sContent.replaceAll("[^(a-zA-Z0-9`\\-=\\';.,/~!@#$%^&*()_+|}{\\\":><?\\[\\]\" \")]", "");
int en_words_count = 0;
String[] en = en_words.split(" ");
for (String s : en){
if (s.trim().length() != 0){
en_words_count++;
}
}
//韩文字符处理
String kr_words = sContent.replaceAll("[(\\u4e00-\\u9fa5\\u0800-\\u4e00a-zA-Z0-9!\" \",。《》?;’‘:“”【】、)(……¥!·)]", "");
int kr_word_count = kr_words.length();
//合计处理
byteCount = cn_word_count + en_words_count + kr_word_count;
return byteCount;
}
其实一般来讲,统计字数只需要中文和英文区分一下就可以了,但是因为业务需求,所以加入了日文和韩文的混合统计,其中韩文的字符编码范围是/x3130-/x318F,本来是可以一起在中文字符处理的正则里面过滤的,但是不知道为什么没有生效,只能重新统计一次将中英日文排除掉
最后的运行结果也达到了混合统计的效果,和word里面的统计相似(虽然代码有一点low)