有 Java 编程相关的问题?

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

java如何查找和跳过单词开头和结尾的特殊字符

不熟悉正则表达式,使用以下代码查找单词的结尾/开头是否包含特殊字符

String s = "K-factor:";
        String regExp = "^[^<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[0-9_+]*$";
        Matcher matcher = Pattern.compile(regExp).matcher(s);
        while (matcher.find()) {
            System.out.println("Start: "+ matcher.start());
            System.out.println("End: "+ matcher.end());
            System.out.println("Group: "+ matcher.group());
            s = s.substring(0, matcher.start());
        }

想知道字符串的开头或结尾是否有特殊字符(:在这个示例代码中)。试图跳过角色。 既不是编译时错误,也不是输出


共 (1) 个答案

  1. # 1 楼答案

    请注意,正则表达式匹配的整个字符串不包含您在字符类中定义的字符。所讨论的字符串与该模式不匹配,因为它包含:

    你可以考虑将模式分成两个部分,用交替组检查开始或结束时不需要的字符:

    String regExp = "^[<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[0-9_+]|[<>{}\"/|;:.,~!?@#$%^=&*\\]\\\\()\\[0-9_+]$";
    

    这里,模式有一个^<special_char_class>|<special_char_class>$结构,^在开始时锚定匹配,$在字符串结尾锚定匹配,并且|是交替操作符。注意:我从character类的开头删除了^{,使它们为正,而不是为负,这样它们就可以匹配类中定义的那些字符/范围

    或者,由于如果字符串的开头/结尾包含非字母,则似乎只匹配字符串,因此可以使用

    String regExp = "^\\P{L}|\\P{L}$";
    

    这是Unicode字母识别或仅限ASCII码:

    String regExp = "^\\P{Alpha}|\\P{Alpha}$";