这是我的代码
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,需要帮助来弄清楚这个
尝试使用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使用括号来标记我们搜索的组,在我们的例子中只是数字
因为您正在使用split
方法来查找正则表达式的出现,并且,好吧..将字符串拆分到此位置。你的字符串以X^
开头,所以它非常符合你的正则表达式。