有没有更好的方法在Matcher中使用group()提取名称值?

时间:2013-01-03 17:45:49

标签: java

从输入字符串中提取命名数据时,使用Matcher.group(String groupname)  http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html

在下面的代码中,receivedData是一个具有组名称的hashmap。我必须遍历它以获取每个名称,然后调用组(名称)。 散列映射必须单独维护,并且可能会错误输入名称或与正则表达式中的名称不同步,因为它们有很多。

String patternOfData = "On (day) I ate (mealName) at (restaurant) where they had a deal (entree) for only (price)";

编译模式后,

Pattern dataExtractionPattern = Pattern.compile(patternOfData);

Matcher matcher = dataExtractionPattern.matcher(receivedDataString);
                boolean b = matcher.matches();
                if (!b) {
                    return false;
                }
                for (String key : receivedData.keySet()) {
                    String dataValue;
                    dataValue = matcher.group(key);
                    receivedData.put(key, dataValue);
                }
                return true;

如果我们同时归还名称和价值,会不会更好?像Map.entry group();

或者还有其他方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:1)

首先,Java 7中新增的命名捕获组看起来像(?&lt; NAME &gt; PATTERN ),其中 NAME < / em>是组的名称, PATTERN 是要匹配的模式。所以你的示例正则表达式就像On (?<day>\S+) I ate (?<mealName>\S+)...

如果模式已修复,则没有理由没有固定的组名列表。然后你可以从头开始构建receivedData迭代这些组名,而不是需要使用正确的键设置它。