我有一个问题,我的代码如下:
String data = "java.awt.Color[r=168,g=228,b=160]" //example this changes.
Pattern p = Pattern.compile("(\\d+)");
Matcher m = p.matcher(data);
if(m.matches()){
....
}
然而,它并不匹配。为什么呢?我正在尝试检索括号内的数字。
我应该尝试什么?
Matcher.matches()
方法匹配整个字符串。你可以使用Matcher.find
方法匹配单个整数:
while (m.find()) {
System.out.println(m.group(1));
}
Matcher.matches
告诉您正则表达式是否与整个字符串匹配。 您的字符串不全是数字。 它包含字母,点,等号和方括号。 因此,您的匹配器不匹配。
您需要使用Matcher.find()
。 它搜索部分匹配项。 然后,Matcher.group
允许您检索输入字符串的匹配部分。
matches()
方法尝试匹配整个字符串,但你只需要其中的数字出现次数。
你需要使用 find()
方法,并且可能需要使用 while
运算符代替 if
,因为它会将 matcher
移动到下一个匹配项。由于您的正则表达式与字符串不匹配,因此在 \d 匹配之前(和之后)仍有其他字符。