Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从字符串中提取数字_Java_Regex - Fatal编程技术网

Java 如何从字符串中提取数字

Java 如何从字符串中提取数字,java,regex,Java,Regex,我想提取的数字是与!仅示例2和3,然后必须将其保存在int[]中,并再次将这些数字粘贴到2!第三!存在。第一件事:字符串是。您尝试的代码应该更像 String a = "sin(23)+cos(4)+2!+3!+44!"; a.replaceAll("\D"); //Not working it is only extracting Digits 第二,如果您确定不会有像1+2这样的更复杂的表达式+3.然后可以使用Matcher类中的appendReplacement和appendTail方

我想提取的数字是与!仅示例2和3,然后必须将其保存在int[]中,并再次将这些数字粘贴到2!第三!存在。

第一件事:字符串是。您尝试的代码应该更像

String a = "sin(23)+cos(4)+2!+3!+44!";
a.replaceAll("\D"); //Not working it is only extracting Digits 
第二,如果您确定不会有像1+2这样的更复杂的表达式+3.然后可以使用Matcher类中的appendReplacement和appendTail方法

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

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

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();
输出:

开始索引:15结束索引:17->2! 开始索引:18结束索引:20->3! 开始索引:21结束索引:24->44! 进一步改进:

通过以下操作,可以直接使用Integer.parseInt强制转换matcher.group1返回值:

输出:


你能猜出剩下的吗?您可以使用索引值替换原始字符串中的匹配项,但一定要从最后一个字符串开始。

注意:replaceAall返回一个新字符串,它不会修改当前对象。如果您试图构建计算器,那么这是错误的方法。如果你必须计算1+2怎么办+3.我不明白,我必须再把这些数字贴在2的地方!第三!存在您想将它们粘贴到哪里?预期产量是多少?那44呢@Pshemo我正在使用JEP库解析和计算表达式,它没有阶乘方法。。所以我创建了它,但问题是我的方法factorialint在其中,所以我想要的是那些与!在我的string@user3044181所以基本上你想匹配它们并把它们放在一个数组中,而在这种情况下对输入变量a不做任何事情?我认为您应该查看手册或对您喜爱的搜索引擎进行一些查询,然后使用\\d+?=!按照你的模式。请注意,在Java中,您需要避开反斜杠。这实际上并不能回答有关某个方面的问题!和int[]数组
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());
}
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