0

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

在下面的代码中, receivedData 是一个包含组名称的哈希图。我必须遍历它以获取每个名称,然后调用 group(name)。hashmap 必须单独维护,并且可能会输入错误的名称或与正则表达式中的名称不同步,因为它们的数量很大。

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

编译 Pattern 后,

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;

如果我们同时返回 name 和 value 会更好吗?像 Map.entry group();

还是有其他方法可以做到这一点?

4

1 回答 1

1

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

如果模式是固定的,那么没有理由不能拥有固定的组名列表。然后,您可以receivedData从头开始迭代这些组名,而不是需要已经使用正确的键进行设置。

于 2013-01-03T17:59:41.313 回答