我有String
和String[]
填充搜索项。
如何检查我的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
。
答案 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;
}