我有一个包含数字的字符串。像"Incident #492 - The Title Description"
这样的东西
我需要从这个字符串中提取数字
试过
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(theString);
String substring =m.group();
收到错误
java.lang.IllegalStateException: No match found
我做错了什么?
什么是正确的表达方式?
我很抱歉这么简单的问题,但我搜索了很多但仍未找到如何做到这一点(也许是因为它太晚了......)
答案 0 :(得分:3)
您收到此异常是因为在访问find()
之前需要在匹配器上调用group
:
Matcher m = p.matcher(theString);
while (m.find()) {
String substring =m.group();
System.out.println(substring);
}
答案 1 :(得分:1)
这里有两件事是错的:
您使用的模式并非最适合您的方案,它只检查字符串仅是否包含数字。此外,由于它不包含组表达式,因此调用group()
is equivalent to calling group(0)
, which returns the entire string.
在你打电话给一个小组之前,你需要某些匹配器匹配。
让我们从正则表达式开始。这就是现在的样子。
只有 匹配包含其中所有数字的字符串。你关心的是具体该字符串中的数字,所以你想要一个表达式:
为此,您使用此表达式:
.*?(\\d+).*
最后一部分是确保匹配器能够找到匹配项,并确保它获得正确的组。这完成了:
if (m.matches()) {
String substring = m.group(1);
System.out.println(substring);
}
现在一起:
Pattern p = Pattern.compile(".*?(\\d+).*");
final String theString = "Incident #492 - The Title Description";
Matcher m = p.matcher(theString);
if (m.matches()) {
String substring = m.group(1);
System.out.println(substring);
}
答案 2 :(得分:0)
您需要调用其中一个Matcher
方法,例如find
,matches
或lookingAt
来实际运行匹配。