如何检查字符串是否包含搜索项

时间:2014-09-23 15:27:14

标签: java regex string search-engine contains

我有StringString[]填充搜索项。

如何检查我的String是否包含所有搜索项?

以下是一个例子:

案例1:

String text = "this is a stupid test";
String[] searchItems = new String[2];
searchItems[0] = "stupid";
searchItems[1] = "test";

案例2:

String text = "this is a stupid test";
String[] searchItems = new String[2];
searchItems[0] = "stupid";
searchItems[1] = "tes";

在案例1中,该方法应返回true,但在案例2中,该方法应返回false

5 个答案:

答案 0 :(得分:9)

您可以使用正则表达式中的word boundaries执行此操作:

boolean result = true;
for (String item : searchItems) {
    String pattern = ".*\\b" + item + "\\b.*";
    // by using the &&, result will be true only if text matches all patterns.
    result = result && text.matches(pattern);
}

边界确保只有在文本中出现整个单词时才会匹配搜索词。因此,"tes""test"不匹配,因为"\btes\b"不是"\btest\b"的子字符串。

答案 1 :(得分:2)

我会尝试用空格分割字符串,然后循环遍历所有的夹板部分。

这样的代码可以让你的代码工作:

String text = "this is a stupid test";
List<String> searchItems = new ArrayList<String>();
searchItems.add("stupid");
searchItems.add("test");
for(String word : test.split(" ")) {
   if(searchItems.contains(word)){
      //do your stuff when the condition is true ...
   } else {
      //do your stuff when the condition is false ...
   }
}

答案 2 :(得分:0)

我会在文本中创建所有单词的数组。 如果textArray包含所有搜索字符,则使用2 for循环进行检查。

public boolean search(String text, String[] searchItems) {

    String[] textArray = text.split(" ");

    for(String searchitem: searchItems) {

       boolean b = false;

       for(String word : textArray) {

           if(word.equals(searchitem)) {
               b = true;
               break;
           }

        }

     // text doesn't contain searchitem
     if(!b) return false;

     }

     return true;

}

答案 3 :(得分:0)

text.matches(".*\\b" + searchItems[0] + "\\b.*")

注意:"\\b"将确保只匹配“整个单词”。

答案 4 :(得分:-2)

public boolean findIfAllItemsMatch(String[] searchItems, String text) {
    boolean allItemsMatch = true;
    for (String item_ : searchItems) {
        if(!text.contains(item_)) {  
              allItemsMatch = false;
              break;
         }
    }
    return allItemsMatch;
}