2015-02-08 31 views
1

我有字符串Q,我想將它分成多個部分。例如我想有(ADD等於1(EXP 1 4)等於2,依此類推每一個括號後分裂,但仍保持了字符串的形式。拆分一個字符串並製作陣列上的零件

String q =(("(ADD(EXP 1 4)(SQR 1)(DIV 34 77)(MULT 12 5 3 7)(Sub 1 2")); 

我試着這樣做這樣的但都沒有成功

 s[0]=q.indexOf("("); 
     s[1]=q.indexOf(")"); 
+0

'indexOf'返回一個整數,所以你到目前爲止的代碼創建了一個整數數組。 – ajb 2015-02-08 02:28:24

+0

對不起,只是Java,我希望它們是一組可能在數組中的較小的字符串? – 2015-02-08 02:29:30

+0

http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-。其實,這可能會有所幫助,但這並不是很清楚你需要什麼。你想讓每個結果字符串以'('開始?或者你想要更復雜的東西? – ajb 2015-02-08 02:29:53

回答

0

以下:

String q ="(ADD(EXP 1 4)(SQR 1)(DIV 34 77)(MULT 12 5 3 7)(Sub 1 2"; 
String[] result = q.split("(?=\\()"); 

產生以下字符串結果數組中:

"(ADD" 
"(EXP 1 4)" 
"(SQR 1)" 
"(DIV 34 77)" 
"(MULT 12 5 3 7)" 
"(Sub 1 2" 

但我不完全確定這就是你想要的(如果不是,你需要爲我們澄清)。

split的參數是一個正則表達式。通常將它用於"/"之類的東西,它將通過斜槓字符分割輸入字符串。但這樣做不會在結果中留下斜線字符。要在字符串上輸入split,但在結果中留下分隔符,則需要向前看。上面的正則表達式就是這樣。 (?=<something>)展望某些模式,但不「消耗」它;這裏的模式是\\(這意味着一個單獨的(字符,但它需要在反斜槓前面,因爲(通常在正則表達式中具有特殊含義。

+0

當我打印出結果時,它打印出[Ljava.lang.String; @ 15db9742 有什麼想法? – 2015-02-08 02:45:56

+0

http://stackoverflow.com/questions/409784/whats-the-simplest-way-to-print-an-array – ajb 2015-02-08 04:19:27

0
q = q.replaceAll(")",""); 

String[] splittedString = q.split("("); 

現在你有像下面這樣的元素的字符串數組。

ADD

EXP 1 4

SQR 1

希望這是你所期望的。

+0

更正。謝謝,併爲錯誤感到抱歉。 – 2015-02-08 02:46:02

0

如果你想在括號中的所有元素分開,你可以用一個非常簡單的(而且容易閱讀的)正則表達式與split方法:

String[] array = s.split("[(*|)*|(*)*|)*(*]"); 

這會給你{ADD, EXP 1 4, SQR 1, DIV 34 77, MULT 12 5 3 7, Sub 1 2}

如果你想保持嵌套,這是更復雜,我強烈建議你看看正則表達式教程,如http://www.regular-expressions.info/tutorial.html

相關問題