繁体   English   中英

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

[英]How can I check if String contains the domain name listed in ArrayList having multiple domains in Java?

我试图只允许来自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;
}

任何人都可以帮忙。

您应该反转条件。 现在,如果您的字符串包含列表中的所有字符串,则函数将仅返回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;
}

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

您可能可以使用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;
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM