这是我的代码
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,需要帮助来解决这个问题
答案 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^
开头,因此非常匹配您的正则表达式。