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