如何检查String是否包含ArrayList中列出的具有Java中多个域的域名?

时间:2019-03-28 14:14:37

标签: java if-statement arraylist

我试图仅允许来自ArrayList中列出的特定域的请求,因此我需要进行条件检查,以确保URL是否包含ArrayList中列出的域,然后允许否则引发异常。

假设我的ArrayList = [abc.com,def.com,xyz.com] 我想检查我的URL是否包含来自ArrayList的任何域,然后返回true,否则返回false。

我尝试下面的代码,但是它一步一步地检查域名。 但是,如果域名有效,则返回false-

ArrayList = [abc.com,def.com,xyz.com]

public static boolean isListContainValidDomain(List<String> arraylist) {
String reqURL = "dev.def.com";
boolean isValid = true;

    for (String str : arraylist) {

        if(!reqURL.contains(str.toLowerCase())){
            isValid = false;
        }
    }
    return isValid;
}

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

您应该反转条件。现在,如果您的字符串在列表中包含 all 个字符串,则您的函数将仅返回true

public static boolean isListContainValidDomain(List<String> arraylist) {
    String reqURL = "dev.def.com";

    for (String str : arraylist) {
        if (reqURL.contains(str.toLowerCase())) {
            return true;
        }
    }

    return false;
}

答案 1 :(得分:1)

为什么不构建一个包含所有域的正则表达式。基本上,您应该将ArrayList = [abc.com, def.com, xyz.com]转换为类似于(abc.com | def.com | xyz.com)的字符串,然后才可以进行单个正则表达式匹配。

答案 2 :(得分:1)

您也许可以使用Streams api:

public static boolean isListContainValidDomain(List<String> arraylist) {
    final String reqURL = "dev.def.com";
    boolean isValid = arraylist.stream().anyMatch(domain -> reqURL.contains(domain));
    return isValid;
}

答案 3 :(得分:0)

由于URL可能在任何地方都有域名(abc.computer.xxx.com),我认为您应该使用endsWith。这是使用流的解决方案

 boolean isOk = arrayList.stream().anyMatch( dom -> reqUrl.endsWith(dom.toLowerCase()));