2016-11-25 8 views
2

У меня есть следующая строка с вложенными скобками:Как получить данные из вложенных круглых скобок?

String a = "(red(blue))grey((orange)green)"; 

И я хочу, чтобы заполнить массив со значением каждой скобки, которая печатает:

(red(blue)) 
(blue) 
grey 
((orange)green) 
(orange) 
//In any order 
+0

Я дам подход здесь, вы можете использовать стек для каждого персонажа будет вставить в it.lets сказать (..) -> по имени в качестве контейнера каждого контейнера содержит контейнер, поэтому on.if u сталкиваются с (вставлять в стеке, продолжая до столкновения с символом ')', когда вы сталкиваетесь с), до тех пор, пока не появится символ '(' и создайте объект контейнера в стеке, а также список, чтобы показать, что это будет работать на вашем вопрос –

+2

Возможный дубликат [Как я могу рекурсивно сопоставить шаблон с использованием регулярных выражений?] (http://stackoverflow.com/questions/8659764/how-can-i-recursive-match-a-pattern-using-regular-express ионов) –

+0

Сальвадор, вы должны показать, что вы пробовали, чтобы мы могли видеть, что вы действительно пробовали вещи – tucuxi

ответ

0

I Think Ниже код должен работать:


Алгоритм: сначала отметьте конечное положение открывающей скобки с помощью стека, а затем следующую итерацию у вас есть положение открытия и закрытия.

import java.util.*; 
import java.lang.*; 
import java.io.*; 

class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     String s = "(red(blue))grey((orange)green)"; 
     int n = s.length(); 
     int end[] = new int[n]; 
     boolean internalWords = false; 
     Stack<Integer> stack = new Stack<Integer>(); 
     for(int i = 0 ; i < n ; i++){ 
      if(s.charAt(i)=='('){ 
       stack.push(i); 
      }else if(s.charAt(i)==')'){ 
       int start = (Integer)stack.pop(); 
       end[start] = i; 
      }else if(stack.isEmpty()){ 
       System.out.print(s.charAt(i)); 
      } 
     } 
     System.out.println(); 
     for(int i = 0 ; i < n ; i++){ 
      if(s.charAt(i)=='('){ 

       for(int j = i ; j <= end[i]; j++){ 
        System.out.print(s.charAt(j)); 
       } 
       System.out.println(); 
      } 
     } 
    } 
} 

вне положенный:
grey (red(blue)) (blue) ((orange)green) (orange)