How to Split a mathematical expression on operators as delimiters, while keeping them in the result?

1st problem: –

Multiple declaration of String myString;

2nd problem: –

String initialized incorrectly. Double quotes missing at the ends. Remove bracket and brace from the ends.

String myString = "a+b-c*d/e";

3rd problem: –

String array initialized with an String object, rather than an array object.

String[] result=new String();  // Should be `new String[size]`

In fact, you don’t need to initialize your array before hand.

4th problem: –

String.split takes a Regular Expression as argument, you have passed an array. Will not work.

Use: –

String[] result = myString.split("[-+*/]");

to split on all the operators.


And regarding your this statement: –

as well as =, -, *, d, / (also an array of operators) separately.

I don’t understand what you want here. Your sample string does not contains =. And d is not an operator. Please see if you want to edit it.

UPDATE : –

If you mean to keep the operators as well in your array, you can use this regex: –

String myString= "a+b-c*d/e";
String[] result = myString.split("(?<=[-+*/])|(?=[-+*/])");
System.out.println(Arrays.toString(result));

/*** Just to see, what the two parts in the above regex print separately ***/
System.out.println(Arrays.toString(myString.split("(?<=[-+*/])")));
System.out.println(Arrays.toString(myString.split("(?=[-+*/])")));

OUTPUT : –

[a, +, b, -, c, *, d, /, e]
[a+, b-, c*, d/, e]
[a, +b, -c, *d, /e]

(?<=...) means look-behind assertion, and (?=...) means look-ahead assertion.

Leave a Comment