2013-08-21 165 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