JAVA正则表达式怎么表达汉字_Java的正则表达式匹配汉字

[Java 提供了功能强大的正则表达式API,在java.util.regex 包下。本教程介绍如何使用正则表达式API。]

刚才有同事问,顺便发出来记一下。

以前读《精通正则表达式》的时候已经知道Java的正则表达式支持\p{In

name}的形式来指定匹配属于name的Unicode区块的字符。JDK的

Pattern类的文档上也有相关例子,\p{InGreek},表示匹配一个属于名为“Greek”的Unicode区块的字符。

那汉字怎么办?

Unicode里中文、日文与韩文的汉字是放在同一个(一些)区块里的,主要是在“CJK Unified Ideographs”当中,[最近需要在部署实时爬虫检测系统时,需要动态显示页面内容,但也为了简单,于是想了个很奇怪的办法。想把一个长篇小说,《地缘政治大战略》中的所有内容赋值给字符串,但还有一些在“CJK Unified Ideographs Extension A”与“CJK Unified Ideographs Extension B”当中。

以前我没用这个方式匹配过汉字,还在想这名字里面有空格怎么办,试了一下\p{InCJK Unified Ideographs}发觉果然可以……当然,这种办法是不区分匹配到的汉字到底是中文、日文还是韩文的。也不区分简繁体。同事还问怎么用正则表达式只匹配简体中文,这个我就没想出什么好办法。

《精通正则表达式》里也提到.NET用的Unicode区块语法是\p{name}或者\p{Is

name},相关文档在

这里。

放一demo代码:

public class TestUnicodeBlock {

public static void main(String[] args) {

final String regex = "\\p{InCJK Unified Ideographs}";

final String[] testChars = {

"\u6211", // a Chinese character

"\u300A", // a full-width punctuation

"\u3042", // a Hiragana character

"\uD55C" // a Hangul character

};

for (String s : testChars) {

System.out.printf("matched %s: %b\n", s, s.matches(regex));

}

}

}[统计指定内容的汉字个数:String str = 北京欢迎你 hello welcome!;int count=0;Pattern pattern = Pattern.compile([\u4e00-\u9fa5]);char c[] = str.toCharArray();for(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值