[英]How can I check if a String is IPv4 / IPv6 or domain name? (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.