2013-08-21 119 views
1

我有一个使用Java 1.5的问题,它涉及到计算一个字符串中括号的数量,但也忽略了它们内部的含义。我在网上看到很多示例,显示如何计算括号,但我只想要父级括号。一种计算括号内数字的方法,不包括括号内的内容

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

someText[blarg[more text]and more] 

因为我想要的东西,得到的总的是一对。

+3

正则表达式不是这个工具。 – Michelle

回答

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等一些正则表达式引擎能够适应递归,但这不是标准的。

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)堆栈。

+0

我认为'Deque'在这里完全是过度杀伤。你基本上是用它作为荣耀的柜台。 – arshajii