有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

另一个Java正则表达式问题

我有以下代码:

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.023下测试


共 (1) 个答案

  1. # 1 楼答案

    如果在一个字符类中有一个不带换行符的连字符,它作为一系列字符有一个特殊的含义:例如,[a-Z]表示a和Z之间的所有字符

    例外情况是,连字符位于字符类的开头或结尾,在这种情况下,它会被逐字处理,并且只匹配一个连字符