当前位置: 代码迷 >> java >> Java简单地函数
  详细解决方案

Java简单地函数

热度:94   发布时间:2023-07-17 20:42:10.0

我编写了一个函数来检查字符串是否包含某些单词,但对代码的外观不满意

所以目前我有

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必须具有验证器,用户帐户,许可证.....

所以我尝试了以下

 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的新手。 我已经检查了正则表达式,但仍然可以弄清楚我们如何实现这一点。

我该如何进行

不要使用字符串来表示一组字符串。 使用...一组字符串: 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

如果您具有必需字符串的Collection ,则可以执行以下简单操作:

mustHave.stream().allMatch(url::contains)

我的示例没有进行不区分大小写的检查,但是您明白了。

  相关解决方案