如何解析指数的多项式

时间:2016-09-20 03:26:55

标签: java regex split

如果给出"(-2)x^(-2)+(3)x^(1)-(18)x^(-45)"之类的字符串,我将如何使用split()来获取指数?所以这个例子将返回[-2, 1, -45]。我试图找出正则表达式,但它很令人困惑。我最接近的是string.split("x\\^\\("),但它并不是我想要的完全分裂。

2 个答案:

答案 0 :(得分:0)

试一试

String str = "(-2)x^(-2)+(3)x^(1)-(18)x^(-45)";
char[] chars = str.toCharArray();
List<String> exponents = new ArrayList<String>();
for(int i=0; i<chars.length; i++) {
    if(chars[i] == '^') {
        if(++i<chars.length && chars[i] == '(') {
            StringBuilder sb = new StringBuilder();
            while(++i<chars.length && chars[i] != ')') {
                sb.append(chars[i]);
            }
            exponents.add(sb.toString());
        }
    }
}

答案 1 :(得分:0)

如果您需要基于正则表达式的解决方案,请尝试此操作:

    String line = "(-2)x^(-2)+(3)x^(1)-(18)x^(-45)";         
    String pattern = ".*?\\^\\(([\\d-]+)\\)[\\+-]*";
    Pattern r = Pattern.compile(pattern,Pattern.MULTILINE);

    Matcher m = r.matcher(line);
    while (m.find()) {            
        System.out.println("Found value: " + m.group(1));            
    } 

Sample Demo at Debuggex