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

问题描述 投票:0回答:2

这是我的代码

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

我不知道第一行空间来自哪里,我找不到想要摆脱它,我尝试使用其他正则表达式,并使用编译,仍然可以摆脱第一行,我尝试使用新字符串“X + X ^ 5 + 2X ^ 2 + 3X ^ 3 + 4X ^ 4”;第一行显示exp:X。我也使用在线正则表达式编译来试试我的问题,但是他们的答案是5,2,3,4,买eclipse给一个空间,然后5,2,3,4,需要帮助来弄清楚这个

java regex polynomials
2个回答
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位或更多位数(注意+符号)。 Dash(^)以反斜杠(\)为前缀,因为它在正则表达式中具有特殊含义 - 字符串的开头 - 但在您的情况下,您只需要与^字符完全匹配。

我们希望将匹配包装在一个组中,以便在匹配过程中及时引用它们。这意味着我们需要使用括号()来标记它们。

然后我们想把我们的模式变成Java String。在String文字中,\character具有特殊含义 - 它用作控制字符,例如"\n"代表一个新行。这意味着如果我们将模式放入String文字中,我们需要逃离\,因此我们的模式变为:"\\^([0-9]+)"。注意双\

接下来,我们遍历所有匹配获得组1,这是我们的数字匹配。请注意,即使^.character是我们模式的一部分,我们的匹配也不会涵盖它。这是因为wr使用括号来标记我们搜索的组,在我们的例子中只是数字


0
投票

因为您正在使用split方法来查找正则表达式的出现,并且,好吧..将字符串拆分到此位置。你的字符串以X^开头,所以它非常符合你的正则表达式。

© www.soinside.com 2019 - 2024. All rights reserved.