java - 如何计算 Java 正则表达式中字符串中括号的数量

标签 java regex

所以我尝试使用正则表达式来计算字符串中括号(例如右括号)的数量。我在匹配器类上找到了这个方法“groupCount”。所以我认为这可以帮助我。

groupCount 在 JavaDoc 中说“任何小于或等于此方法返回的值的非负整数都保证是此匹配器的有效组索引。”所以我想这个声明

m.group(m.groupCount());

应该总是有效。错误...

这是我编写的一些测试代码:

public class TestJavaBracketPattern {

    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\))").matcher(")");
        System.out.println(m.group(m.groupCount()));
    }

}

现在我希望匹配一个右括号(在正则表达式中称为\))并获得单个匹配。正则表达式是 (\)) - 这应该与包含闭括号符号的组匹配。但它只是抛出一些异常(java.lang.IllegalStateException:未找到匹配项)。

接下来,我尝试在没有匹配的地方进行匹配:

public class TestJavaBracketPattern {

    public static void main(String[] args) {
        Matcher m = Pattern.compile("(\\))").matcher("(");
        System.out.println(m.group(m.groupCount()));
    }

}

我也遇到了同样的异常。事实上,在这两种情况下,我发现 groupCount 方法都返回 1。

很困惑。

最佳答案

下面的内容是不是太务实了?

@Test
void testCountBrackets() {
    String s = "Hello) how)are)you(";
    System.out.println( s.length() - s.replaceAll("\\)", "").length() ); // 3
}

(当然,这假设您想要搜索真正的 RE,而不仅仅是括号。否则只需使用 s.replace(")",""))

关于java - 如何计算 Java 正则表达式中字符串中括号的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8397138/

相关文章:

java - 如何在gradle中执行jar文件?

javascript - 如何用正则表达式匹配特定的字符串?

javascript - 测试正则表达式时 Console.log 不起作用

java - 将编码开关传递给 Gradle "JavaExec"任务的 JVM

java - 从命令行读取java中的属性

java - Spring Security 4 - REST 身份验证失败和 Controller 异常处理程序

php - 在 Python 中替换字符串时可以传递字典吗?

php - 正则表达式捕获查询字符串中的变量

java8 - 使用 ChannelSftp 模式匹配选择最后修改的文件

java - Graql 插入查询 : duplicate Var objects