一种计算括号数量的方法,不包括括号内的内容

时间:2013-08-21 14:11:06

标签: java regex

我在使用Java 1.5时遇到问题,包括计算字符串中括号的数量,但也忽略了它们内部的内容。我在网上看到很多示例如何计算括号,但我只想要括号。

一个例子是使用以下字符串:

someText[blarg[more text]and more]

对于我想要的,结果总数将是一对。

2 个答案:

答案 0 :(得分:6)

你不能使用正则表达式(至少不是Java),但你可以这样做:

int count = 0;

int brackets = 0;
for (char c : str.toCharArray()) {  // str is the string you are searching
    if (c == '[') {
        if (brackets == 0) {
            count++;
        }
        brackets++;
    }
    else if (c == ']') {
        brackets--;
    }
}

最后,count将是顶级括号对的数量。

通常,正则表达式不适合处理递归结构,例如任意嵌套括号。一些正则表达式引擎(如Perl的引擎)能够适应递归,但这不是标准的。

答案 1 :(得分:0)

如果要计算父括号,可以尝试下一个:

public static void main(String[] args) {

    String input = "[[]] [[]] [[[]]]";

    int parents = 0;
    Deque<Character> deque = new LinkedList<>();
    for (char c : input.toCharArray()) {
        switch (c) {
            case '[':
                deque.addLast(c);
                break;
            case ']':
                deque.removeLast();
                if (deque.isEmpty()) {
                    parents++;
                }
                break;
        }
    }
    System.out.printf("Parents: %d", parents);
}

输出:

3

java.util.Deque是后进先出(LIFO)堆栈。