2016-11-25 57 views
2

我有嵌套的括号中的下一个字符串:如何从嵌套括号中获取数据?

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

而且我想,以填补打印出每一个括号的值的数组:

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

我会给出一个方法在这里,你可以使用堆栈每个字符会被插入到it.lets说(..) - 命名为容器每个容器>包含容器等。如果遇到(插入到堆栈继续直到遇到')'字符时遇到)字符弹出直到'('并创建容器对象插入到堆栈并列出以显示这将工作在您的的问题 –

+2

可能重复[我怎样可以递归匹配使用正则表达式的模式?(http://stackoverflow.com/questions/8659764/how-can-i-recursively-match-a-pattern-using-regular-express离子) –

+0

萨尔瓦多,你应该显示你已经尝试过,以便我们可以看到你实际上已经尝试过 – tucuxi

回答

0

我想下面的代码应该工作:


算法:一是利用标记栈,然后下一次迭代你的开口位置开括号和关闭位置的结束位置。

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)