我有以下java函数。我们正在寻找的是名称中 listToSearchFor 列表中的第一次出现。
我们希望将 JR 作为输出,因为它首先出现在数组列表中。
我们正在 SR (因为这是RegEx的工作原理)
基本上我们正在尝试的是,如果我们从Left->遍历ArrayList并在给定的输入中进行查找,如果找到匹配则停止继续进行。
从模式匹配中我们了解到,顺序来自Left-> Right
public static String findTheFirstOccurenceFromTheList() {
String name = "CHRIS SR (A BAD BOY Parenthesis) DAVID JR CARNER";
public static List<String> listToSearchFor = Arrays.asList(" I ", " JR ", " SR ", " III ", " II ", " IV ", "2ND ", "3RD ", "4TH ", "5TH ", "6TH ", "7TH ", "8TH ", "9TH ");
String suffix = null;
int startPos = 0;
int endPos = 0;
Pattern pattern = Pattern.compile(listToSearchFor.stream().map(String::valueOf).map(Pattern::quote).collect(Collectors.joining("|")));
Matcher match = pattern.matcher(name);
while (match.find()) {
suffix = match.group();
startPos = match.start();
endPos = match.end();
break;
}
return suffix;
}
答案 0 :(得分:0)
如果您没有被强制使用正则表达式,则可以使用简单的包含循环
String findFirstTitleInList(String searchString, List<String> titles)
{
for(int i = 0; i < titles.size(); i++) //foreach loop might not be ordered on List
if(searchString.contains(titles.get(i)))
return titles.get(i);
//does not contain
return null;
}