String a = "sin(23)+cos(4)+2!+3!+44!";
a.replaceAll("\D"); //Not working it is only extracting Digits
Run Code Online (Sandbox Code Playgroud)
我想提取与本数!只(例如2和3),则必须将它保存在一个int[]并有这些数字在那里的地方重新粘贴2!和3!存在.
第一件事:字符串是不可变的.你试过的代码应该更像
a = a.replaceAll("\\D","");
Run Code Online (Sandbox Code Playgroud)
其次,如果你确信你不会有更多的complext这样的表达式((1+2)!+3)!,那么你可以使用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();
Run Code Online (Sandbox Code Playgroud)