我试图仅允许来自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;
}
有人可以帮忙吗?
答案 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()));