Java 如何从正则表达式中提取值并打印它们,以及如何对这些值进行计算

Java 如何从正则表达式中提取值并打印它们,以及如何对这些值进行计算,java,regex,Java,Regex,我有一个字符串“规范文件:15个通过,5个失败,总共20个(100%完成),在00:08:53” 我需要使用正则表达式并打印以下内容: Passed: 15 Failed: 5 Total: 20 还需要计算并打印通过率。请帮忙 我正在使用以下代码: String line = "Spec Files: 15 passed, 5 failed, 20 total (100% completed) in 00:08:53"; Pattern p = Pattern.compile("(\

我有一个字符串
“规范文件:15个通过,5个失败,总共20个(100%完成),在00:08:53”

我需要使用正则表达式并打印以下内容:

Passed: 15
Failed: 5
Total: 20
还需要计算并打印通过率。请帮忙

我正在使用以下代码:

String line = "Spec Files:     15 passed, 5 failed, 20 total (100% completed) in 00:08:53";
Pattern p = Pattern.compile("(\\d+)\\s+");
Matcher m = p.matcher(line);
while(m.find()) {
    System.out.println(m.group());
} 

您需要一个正则表达式来捕获所需的两个元素:文本和值,然后按良好顺序打印它们:

String line = "Spec Files:     15 passed, 5 failed, 20 total (100% completed) in 00:08:53";
Pattern p = Pattern.compile("(\\d+)\\s+(\\w+)");
Matcher m = p.matcher(line);
while (m.find()) {
    System.out.println(m.group(2) + ": " + m.group(1));
}
/*
passed: 15
failed: 5
total: 20
  • 大写不是一个内置函数,因此您可以查看

通过%:

Map<String, Integer> map = new HashMap<>();
while (m.find()) {
    System.out.println(m.group(2) + ": " + m.group(1));
    map.put(m.group(2), Integer.parseInt(m.group(1)));
}
double passPercentage = map.get("passed") / (double) map.get("total");
System.out.println(passPercentage);

你的代码没有计算任何东西。让我们看看你的尝试。所以这不是为我的站点编写的代码。Pattern p=Pattern.compile(“(\\d+)\\s+(\\d{6})”;匹配器m=p.匹配器(线);而(m.find()){System.out.println(m.group());}进行了可更改并能够打印。不知道如何计算通过率。@arzo谢谢。如果我想使用这些值计算通过率,有没有函数可以这样做?@afser如果答案符合您的问题,您现在可以考虑投票/接受答案;)
    int passed = 0, total = 0;
    while (m.find()) {
        System.out.println(m.group(2) + ": " + m.group(1));
        if (m.group(2).equals("passed")) {
            passed += Integer.parseInt(m.group(1));
        } else if (m.group(2).equals("total")) {
            total += Integer.parseInt(m.group(1));
        }
    }
    double passPercentage = passed / (double) total;
    System.out.println(passPercentage);