2013-08-21 2 views
1

Java 1.5를 사용하면 문자열에서 대괄호 수를 계산하는 것뿐만 아니라 그 안에 들어있는 내용을 무시하는 문제가 있습니다. 대괄호 개수를 표시하는 방법을 보여주는 온라인 예제를 많이 보았지만 부모 만 대괄호가 필요합니다.괄호 안의 내용을 포함하지 않고 대괄호 수를 계산하는 방법

예는 다음 문자열을 사용하는 것입니다 :

someText[blarg[more text]and more] 

내가 원하는 경우, 그 결과 총 한 쌍의 것입니다.

당신은 이것에 대한 정규식을 사용할 수 없습니다
+3

정규 표현식은이를위한 도구가 아닙니다. – Michelle

답변

6

는 (자바, 적어도),하지만 당신은 같은 것을 할 수있는이 말에

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

관련 문제