String s="大牛这孩";
Pattern pattern=Pattern.compile("[\u4e00-\u9fa5]");
Matcher matcher=pattern.matcher(s);
System.out.println(matcher.matches());
为什么我在javascript下用4e00-9fa5可以行,在java下不行呢?
我用new String(s.getBytes(),"UTF-8")转换后试了也不行,那就排除原始内容编码的问题了。
String s="大牛这孩";
Pattern pattern=Pattern.compile("[\u4e00-\u9fa5]");
Matcher matcher=pattern.matcher(s);
System.out.println(matcher.matches());
首先是因为那个正则表达式需要更多的转义:
[code="java"]"[\u4e00-\u9fa5]+"[/code]
因为Java的字符串要先对\做转义……
其次是因为matcher.matches()没用对。这个方法等同于自动在pattern的前后加上^和$,显然这个字符串超过了长度1,所以匹配失败了。用matcher.find()或者matcher.lookingAt()都可以。