2015-04-28 37 views
2

我有一個字符串像需要拆分基於分隔符串,但這些都是分組

String str = "(3456,"hello", world, {ok{fub=100, fet = 400, sub="true"}, null }, got, cab[{m,r,t}{u,u,r,}{r,m,"null"}], {y,i,oft{f,f,f,f,}, tu, yu, iu}, null, null) 

現在我需要拆分基於逗號此字符串(,),但它們之間{字符串}和[ ]不應該分裂。所以我出來放應該像

3456 
hello 
world 
{ok{fub=100, fet = 400, sub="true"}, null} 
got 
cab[{m,r,t}{u,u,r,}{r,m,"null"}] 
{y,i,oft{f,f,f,f,}, tu, yu, iu} 
null 
null 

我知道這看起來很奇怪,我可以用舊的傳統暴力方法做到這一點,但我需要的,如果沒有這些類型的問題,任何簡單的邏輯。

任何人都可以幫助我嗎?

在此先感謝:-)

+2

你的'String'在概念上與標記非常接近。你應該考慮不使用正則表達式來分割它 - 至少從長遠來看不是。 – Mena

+2

http://stackoverflow.com/a/26329550/1393766 – Pshemo

+1

這就像使用正則表達式解析XML ...可能,但很難做到正確,而更簡單的方法可用。 –

回答

2
// Assuming open brackets have corresponding close brackets 
int brackets = 0; 
int currIndex = 0; 
List<String> output = new ArrayList<String>(); 
for (int i = 0; i < str.length(); i++) { 
    if (isOpenBracket(str.charAt(i))) { 
     brackets++; 
    } else if (isCloseBracket(str.charAt(i))) { 
     brackets--; 
    } else if (str.charAt(i) == ',') { 
     output.add(str.substring(currIndex, i)); 
     currIndex = i + 1; 
    } 
} 
output.add(currIndex, str.length()); 
return output; 
將這工作

+1

謝謝你的回答,你的回答對我很有幫助 –