我有字符串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(")");
我有字符串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(")");
以下:
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>)
展望某些模式,但不“消耗”它;这里的模式是\\(
这意味着一个单独的(
字符,但它需要在反斜杠前面,因为(
通常在正则表达式中具有特殊含义。
当我打印出结果时,它打印出[Ljava.lang.String; @ 15db9742 有什么想法? – 2015-02-08 02:45:56
http://stackoverflow.com/questions/409784/whats-the-simplest-way-to-print-an-array – ajb 2015-02-08 04:19:27
q = q.replaceAll(")","");
String[] splittedString = q.split("(");
现在你有像下面这样的元素的字符串数组。
ADD
EXP 1 4
SQR 1
希望这是你所期望的。
更正。谢谢,并为错误感到抱歉。 – 2015-02-08 02:46:02
如果你想在括号中的所有元素分开,你可以用一个非常简单的(而且容易阅读的)正则表达式与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。
'indexOf'返回一个整数,所以你到目前为止的代码创建了一个整数数组。 – ajb 2015-02-08 02:28:24
对不起,只是Java,我希望它们是一组可能在数组中的较小的字符串? – 2015-02-08 02:29:30
http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-。其实,这可能会有所帮助,但这并不是很清楚你需要什么。你想让每个结果字符串以'('开始?或者你想要更复杂的东西? – ajb 2015-02-08 02:29:53