2016-11-25 9 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)

関連する問題