2
私は、ネストされた括弧で次の文字列があります。ネストされたカッコからデータを取得するには?
String a = "(red(blue))grey((orange)green)";
をそして私はプリントアウトし、各括弧の値を持つ配列を埋めるためにしたい:
(red(blue))
(blue)
grey
((orange)green)
(orange)
//In any order
私は、ネストされた括弧で次の文字列があります。ネストされたカッコからデータを取得するには?
String a = "(red(blue))grey((orange)green)";
をそして私はプリントアウトし、各括弧の値を持つ配列を埋めるためにしたい:
(red(blue))
(blue)
grey
((orange)green)
(orange)
//In any order
私はコードは動作するはずの下には考える:
アルゴリズム:最初にスタックを使用して開き括弧の終了位置をマークし、次の反復で開始位置と終了位置を指定します。
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)
を私はここにアプローチを与えるだろう、あなたは文字のそれぞれにスタックを使用することができますit.letsに挿入されると言う(..) - >各コンテナのコンテナとして命名(あなたが遭遇したときに) 'に遭遇するまでスタックに挿入する)'( 'とスタックにコンテナオブジェクトの挿入を作成し、これもあなたの上で動作することを示すリスト質問 –
[正規表現を使用してパターンを再帰的に一致させる方法は?](http://stackoverflow.com/questions/8659764/how-can-i-recursively-match-a-pattern-using- regular-expressイオン) –
サルバドール、あなたが試したことを示す必要があるので、実際に試したことが分かる – tucuxi