从输入字符串中提取命名数据时,使用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();
或者还有其他方法可以做到这一点吗?
答案 0 :(得分:1)
首先,Java 7中新增的命名捕获组看起来像(?&lt; NAME &gt; PATTERN ),其中 NAME < / em>是组的名称, PATTERN 是要匹配的模式。所以你的示例正则表达式就像On (?<day>\S+) I ate (?<mealName>\S+)...
如果模式已修复,则没有理由没有固定的组名列表。然后你可以从头开始构建receivedData
迭代这些组名,而不是需要使用正确的键设置它。