gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:57:40 25 4
gpt4 key购买 nike

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

在下面的代码中,receivedData 是一个包含组名称的 HashMap 。我必须遍历它才能获取每个名称,然后调用 group(name)。 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();

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

最佳答案

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

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

关于java - 有没有更好的方法在 Matcher 中使用 group() 提取名称-值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14144288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com