如何从字符串中提取数字

Azf*_*qui 0 java regex

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)

我想提取与本数!只(例如23),则必须将它保存在一个int[]并有这些数字在那里的地方重新粘贴2!3!存在.

Psh*_*emo 5

第一件事:字符串是不可变的.你试过的代码应该更像

a = a.replaceAll("\\D",""); 
Run Code Online (Sandbox Code Playgroud)

其次,如果你确信你不会有更多的complext这样的表达式((1+2)!+3)!,那么你可以使用appendReplacementappendTail从匹配器类的方法.

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)