我想将正则表达式添加到我的一个项目中,它允许多种模式和匹配器。
我目前有一个存储类型的枚举......
public enum Types {
OAK_DOOR,
BIRCH_DOOR,
BAMBOO_DOOR,
CAKE,
RANDOM,
WHITE_BED,
RED_BED,
PINK_BED,
BLACK_BED;
}
这是我当前的代码:
public Set<String> getTypes() {
Set<String> foundTypes = Sets.newHashSet();
List<String> regexPatterns = Lists.newArrayList("^.*?_BED", "^.*?_DOOR");
for (String regexPattern : regexPatterns) {
Pattern pattern = Pattern.compile(regexPattern);
for (Types type : Types.values()) {
String name = type.name();
Matcher m = pattern.matcher(name);
while (m.find()) {
foundTypes.add(m.group());
}
}
}
return foundTypes;
}
这不会从 Types 枚举中返回任何值。
我做错了什么?
感谢您的宝贵时间。
如果您想匹配 DOOR
或
BED
中的 ending类型,则只需使用单个正则表达式模式:
(?:DOOR|BED)$
更新了 Java 代码:
public Set<String> getTypes() {
Set<String> foundTypes = Sets.newHashSet();
String regexPattern = "(?:DOOR|BED)$";
Pattern pattern = Pattern.compile(regexPattern);
for (Types type : Types.values()) {
String name = type.name();
Matcher m = pattern.matcher(name);
if (m.find()) {
foundTypes.add(m.group());
}
}
return foundTypes;
}
在您的代码中,您的代码 regexPatterns 列表未正确启动。
以下更改顺利进行:
List<String> regexPatterns = new ArrayList<>(Arrays.asList("^.*?_BED", "^.*?_DOOR"));