如何从字符串中提取数字
String a = "sin(23)+cos(4)+2!+3!+44!"; a.replaceAll("\D"); //Not working it is only extracting Digits
我想提取与之相关的数字!
只有(例2
和3
),然后必须将它保存在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类中的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();