Java RegEx在输入字符串中从regEx Pattern中查找第一个匹配项

时间:2017-11-29 19:52:50

标签: java regex

我有以下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;
}    

1 个答案:

答案 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;
}