regex用于划分数学函数

bjg7j2ky  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(403)

我正在编写一个求导计算器,我需要将给定的字符串输出分成一个字符串数组,但是我当前的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]

zzoitvuj

zzoitvuj1#

使用现有的模式,可以去掉 - 并添加一个额外的替代项来Assert - 在左边,后面没有一个 *,/,^,(,sin(,cos(,tan( ```
(?<=[+/*^()])|(?=[+/*^()-])|(?<=-(?<!(?:[*/^(]|(?:sin|cos|tan)()-))

正则表达式演示| java演示

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]

相关问题