我有以下代码:
public static void main(String[] args){
StringBuilder content = new StringBuilder("abcd efg h i. - – jk(lmn) qq zz.");
String patternSource = "[.-–]($| )";
Pattern pattern = Pattern.compile(patternSource);
Matcher matcher = pattern.matcher(content);
System.out.println(matcher.replaceAll(""));
}其中patternSource字符类由点、减号和\u2013字符(类似于长划线)组成。在执行时会给出我
abcefi- jk(lmn) qzz如果我以任何方式改变字符类中符号的顺序,它就会正常工作,并给出
abcd efg h i jk(lmn) qq zz搞什么鬼?
在JDK/JRE 1.6.0_23下测试
发布于 2011-02-10 14:51:22
如果字符类中有一个未转义的连字符,那么它就有一个特殊的含义:例如,A-Z表示A和Z之间的所有字符。
例外情况是当连字符位于字符类的开始或结尾时,在这种情况下,它被逐字处理,并且只与连字符匹配。
https://stackoverflow.com/questions/4954183
复制相似问题