当我将正则表达式用于多项式时,可以处理第一行空间

时间:2019-04-15 20:26:30

标签: java regex polynomials

这是我的代码

String a = "X^5+2X^2+3X^3+4X^4";
String exp[]=a.split("(|\\+\\d)[xX]\\^");
for(int i=0;i<exp.length;i++) {
    System.out.println("exp: "+exp[i]+" ");
}
我试图找到5、2、3、4的输出 但是我得到了这个答案

exp:
exp:5
exp:2
exp:3
exp:4

我不知道第一行空间是从哪里来的,我找不到摆脱它的意愿,为此我尝试使用其他正则表达式并使用compile,仍然可以摆脱第一行,我尝试使用新的字符串“ X + X ^ 5 + 2X ^ 2 + 3X ^ 3 + 4X ^ 4”;第一行显示exp:X。 而且我也使用在线正则表达式编译器来尝试解决我的问题,但是他们的答案是5,2,3,4,先给eclipse留一个空格,然后5,2,3,4,需要帮助来解决这个问题

2 个答案:

答案 0 :(得分:1)

尝试使用regex,例如:

    String input = "X^5+2X^2+3X^3+4X^4";

    Pattern pattern = Pattern.compile("\\^([0-9]+)");
    Matcher matcher = pattern.matcher(input);

    for (int i = 1; matcher.find(); i++) {
        System.out.println("exp: " + matcher.group(1));
    }

它给出输出:

exp: 5
exp: 2
exp: 3
exp: 4

它如何工作: 使用的模式:\ ^([0-9] +) 匹配任何以^开头,后跟1个或多个数字的字符串(请注意+符号)。破折号(^)以反斜杠(\)为前缀,因为它在正则表达式中有特殊含义-字符串的开头-但在您的情况下,您只想与{{1}完全匹配}。

我们希望将匹配项分组,以便在匹配过程中后期引用它们。这意味着我们需要使用括号^(对其进行标记。

然后,我们想将模式添加到Java )中。在String文字中,String字符具有特殊含义-用作控制字符,例如\代表换行符。这意味着,如果将模式放入"\n"文字中,则需要对String进行转义,因此我们的模式变为:\。请注意双"\\^([0-9]+)"

接下来,我们遍历所有匹配项,得到第1组,这是我们的数字匹配项。请注意,\。character不包含在我们的匹配中,即使它是我们模式的一部分也是如此。之所以如此,是因为wr使用括号标记了我们搜索的组,在我们的案例中,该组仅为数字

答案 1 :(得分:0)

因为您正在使用split方法来查找正则表达式的出现,所以..在此位置拆分字符串。您的字符串以X^开头,因此非常匹配您的正则表达式。