我有以下代码:
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下测试
答案 0 :(得分:4)
如果在字符类中有未转义的连字符,则它具有一系列字符的特殊含义:例如[A-Z]表示A和Z之间的所有字符。
这是一个例外,当连字符位于字符类的开头或结尾时,在这种情况下它按字面处理并仅匹配连字符。