String a = "sin(23)+cos(4)+2!+3!+44!";
a.replaceAll("\D"); //Not working it is only extracting Digits
我想提取仅包含!
的数字(例如2
和3
),然后必须将其保存在int[]
中,并且必须再次粘贴这些数字位于2!
和3!
存在的位置。
答案 0 :(得分:5)
第一件事:字符串是immutable。您试过的代码应该更像
a = a.replaceAll("\\D","");
其次,如果您确定不会有更多补充表达式,例如((1+2)!+3)!
,那么您可以使用Matcher类中的appendReplacement
和appendTail
方法。
String a = "sin(23)+cos(4)+2!+3!+44!";
StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile("(\\d+)!");
Matcher m = p.matcher(a);
while(m.find()){
String number = m.group(1);//only part in parenthesis, without "!"
m.appendReplacement(sb, calculatePower(m.group(number )));
}
m.appendTail(sb);
a = sb.toString();
答案 1 :(得分:4)
使用正则表达式找到你想要的东西:
String a = "sin(23)+cos(4)+2!+3!+44!";
Pattern pattern = Pattern.compile("\\d+!"); //import java.util.regex.Pattern
Matcher matcher = pattern.matcher(a); //import java.util.regex.Matcher
while (matcher.find()) {
System.out.print("Start index: " + matcher.start());
System.out.print(" End index: " + matcher.end() + " -> ");
System.out.println(matcher.group());
}
<强>输出:强>
Start index: 15 End index: 17 -> 2!
Start index: 18 End index: 20 -> 3!
Start index: 21 End index: 24 -> 44!
进一步改善:
使用以下内容,您可以使用matcher.group(1)
直接转换Integer.parseInt()
返回值:
Pattern pattern = Pattern.compile("(\\d+)!");
...
System.out.println(matcher.group(1));
<强>输出:强>
Start index: 15 End index: 17 -> 2
Start index: 18 End index: 20 -> 3
Start index: 21 End index: 24 -> 44
你能弄明白吗?您可以使用索引值替换原始字符串中的匹配项,但确保从最后一个字符串开始。