我编写了一个函数来检查字符串是否包含某些单词,但对代码的外观不满意
我目前有
private String url = "validator=http://url.com;useraccount=sf4cdamloci;licence=39I8934U401;addedon=343443334;serial=7QW0-5TU8-YN9P-G4FZ;limit=123;days=10"
private String musthave ="validator,useraccount,licence,addedon,serial,limit,days"
所以我想检查url是否包含字符串中必须包含的单词。例如,URL必须具有验证器,用户帐户,许可证.....
所以我尝试了以下
Boolean has_validator = false;
Boolean has_licence = false;
.....//others with has_ prefix
String[] split_url = url.split(";")
for(String key_item : split_url){
String[] splitteditem = key_item.split("=");
if (splitteditem[0].equalsIgnoreCase("validator")){
has_validator = true;
}
if (splitteditem[0].equalsIgnoreCase("useraccount")){
has_useraccount = true;
}
....others as well
}
然后以后我可以轻松检查
if(has_useraccount && has_...)
上述解决方案有效,但无法扩展,因为无论何时我添加一个必须编辑功能的新功能。
有没有更好的方法来实现这一目标。还是Java的新手。我已经检查了正则表达式,但仍然可以弄清楚如何实现此目的。
我该如何进行
答案 0 :(得分:2)
不要使用String来表示一组String。使用...一组字符串:Set<String>
。或至少一个字符串数组。
然后仅使用循环。如果文本集中未包含任何单词,则可以立即返回false。如果您从未在循环中返回false,那么所有单词都包含在文本中,并且可以返回true。
伪代码:
for each word in the set
if the word is not in the text, return false
end for
return true
答案 1 :(得分:1)
如果您有Collection
个必备字符串,则可以执行以下简单操作:
mustHave.stream().allMatch(url::contains)
我的示例没有进行不区分大小写的检查,但是您明白了。