2015-02-08 46 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

相关问题