如何将运算符上的数学表达式拆分为分隔符,同时将它们保留在结果中?

San*_*rma 6 java regex string split

我需要拆分一个表达式

a+b-c*d/e 
Run Code Online (Sandbox Code Playgroud)

并获得a,b,c,d,eseperately(字符串数组)以及=,-,*,d,/(也为运营商的阵列)分开.我尝试过:

String myString;

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

String[] result=new String();

String[] separator=new String[]{"+","-","/","*"};

result=myString.split(separator);
Run Code Online (Sandbox Code Playgroud)

但是,它显示错误.怎么解决?

Roh*_*ain 18

第一个问题: -

多重声明 String myString;

第二个问题: -

字符串初始化不正确.两端缺少双引号.从两端卸下支架和支架.

String myString = "a+b-c*d/e";
Run Code Online (Sandbox Code Playgroud)

第3个问题: -

String数组使用String对象而不是数组对象初始化.

String[] result=new String();  // Should be `new String[size]`
Run Code Online (Sandbox Code Playgroud)

实际上,您不需要事先初始化数组.

第四个问题: -

String.split将Regular Expression作为参数,您已经传递了一个数组.不管用.

使用: -

String[] result = myString.split("[-+*/]");
Run Code Online (Sandbox Code Playgroud)

拆分所有运营商.


关于你的这句话: -

以及=, -, *, d, /(也是一组运营商)分开.

我不明白你想要什么.您的示例字符串不包含=.而d不是一个operator.请查看是否要编辑它.

更新: -

如果你的意思是在数组中保留运算符,你可以使用这个正则表达式: -

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("(?=[-+*/])")));
Run Code Online (Sandbox Code Playgroud)

输出: -

[a, +, b, -, c, *, d, /, e]
[a+, b-, c*, d/, e]
[a, +b, -c, *d, /e]
Run Code Online (Sandbox Code Playgroud)

(?<=...)手段look-behind assertion(?=...)手段look-ahead assertion.