我正在编写一个求导计算器,我需要将给定的字符串输出分成一个字符串数组,但是我当前的spliting命令不能很好地处理负数,我需要它不能将负号拆分为*、/、^、(、sin(、cos(、tan((我仍然没有在代码中实现sin、cos和tan),但我会的,所以我想知道如何不把负号分开。
代码:
public class Graph {
private String function;
private final String ONLY_POSITIVE_DELIMITER = "(?<=[+-/*^()])|(?=[+-/*^()])";
public Graph(String function) {
this.function = function;
}
public String getDerivative() {
return null;
}
private List<String> getArguments() {
String[] split = function.split(ONLY_POSITIVE_DELIMITER);
List<String> args = new ArrayList<>(Arrays.asList(split));
System.out.println("Splitten der Funktion: "+args);
return args;
}
}
这将把1-(-2*-1)-3变成 [1, -, (, -, 2, *, -, 1, ), -, 3]
,但我希望它变成: [1, -, (, -2, *, -1, ), -, 3]
1条答案
按热度按时间zzoitvuj1#
使用现有的模式,可以去掉
-
并添加一个额外的替代项来Assert-
在左边,后面没有一个*,/,^,(,sin(,cos(,tan(
```(?<=[+/*^()])|(?=[+/*^()-])|(?<=-(?<!(?:[*/^(]|(?:sin|cos|tan)()-))
String ONLY_POSITIVE_DELIMITER = "(?<=[+/*^()])|(?=[+/*^()-])|(?<=-(?<!(?:[*/^(]|(?:sin|cos|tan)\()-))";
String function = "1-(-2*-1)-3";
String[] split = function.split(ONLY_POSITIVE_DELIMITER);
List args = new ArrayList<>(Arrays.asList(split));
System.out.println("Splitten der Funktion: "+args);
Splitten der Funktion: [1, -, (, -2, *, -1, ), -, 3]