在这里寻求正则表达式专家。我有一个带有数字的字符串,例如
abc 2 de fdfg 3 4 fdfdfv juk @ dfdfgd 45
我需要从这样的字符串中找到所有数字并将其加总。
我的Java代码如下:
public static void main(String[] args) { String source = " abc 2 de fdfg 3 4 fdfdfv juk @ dfdfgd 45"; Pattern pattern = Pattern.compile("[\\w*\\W*(\\d*)]+"); Matcher matcher = pattern.matcher(source); if (matcher.matches()) { System.out.println("Matched"); // For loop is not executed since groupCount is zero for (int i=0; i<matcher.groupCount(); i++) { String group = matcher.group(i); System.out.println(group); } } else { System.out.println("Didn't match"); } }
所以matcher.matches()返回true,因此我可以看到打印了“匹配”。但是,当我尝试获取期望的数字分组时,什么也没打印出来。
有人可以指点我正则表达式和分组部分有什么问题吗?
只需按组提取数字,而不必担心空格。
public static void main(String[] args) throws Exception { String source = " abc 2 de fdfg 3 4 fdfdfv juk @ dfdfgd 45"; // "\\d+" will get all of the digits in the String Pattern pattern = Pattern.compile("\\d+"); Matcher matcher = pattern.matcher(source); int sum = 0; // Convert each find to an Integer and accumulate the total while (matcher.find()) { sum += Integer.parseInt(matcher.group()); } System.out.println("Sum: " + sum); }
结果:
总计:54