如何从字符串中提取数字

String a = "sin(23)+cos(4)+2!+3!+44!"; a.replaceAll("\D"); //Not working it is only extracting Digits 

我想提取与之相关的数字! 只有(例23 ),然后必须将它保存在int[]并且必须再次将这些数字粘贴到2!的位置2!3! 存在。

使用正则表达式查找所需内容:

 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! 

进一步改进:

使用以下命令,您可以使用Integer.parseInt()直接matcher.group(1)返回值:

 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 

你能弄清楚剩下的吗? 您可以使用索引值替换原始字符串中的匹配项,但请务必从最后一个字符串开始。

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

 a = a.replaceAll("\\D",""); 

其次,如果您确定不会有更多的补充文本表达式,如((1+2)!+3)! 那么你可以使用Matcher类中的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();