我有用户输入的关键字列表,它们可能包含特殊字符等$, #, @, ^, &,
。
根据我的要求,当我收到短信列表时,我需要搜索每条消息中的所有关键字。
我们需要匹配确切的关键字。
案例 1:简单关键字 - 简单消息
我曾经\b
匹配确切的关键字,它工作正常。
public static void main(String[] args) {
String patternStr = "(?i)\\bHello\\b";
Pattern pattern = Pattern.compile(patternStr);
List<String> strList = new ArrayList<String>();
strList.add("HHello Message");
strList.add("This is Hello Message ");
strList.add("Now Hellos again.");
for(String str : strList) {
Matcher matcher = pattern.matcher(str);
System.out.println(">> "+matcher.find());
}
}
输出如预期
>> false
>> true
>> false
案例 2:简单关键字 - 带有特殊字符的消息
现在,如果我在相同的代码上运行以下消息,那么它没有按预期工作。
List<String> strList = new ArrayList<String>();
strList.add("#Hello Message");
strList.add("This is Hello Message ");
strList.add("Now Hellos again.");
输出:
true
true
false
预期输出
false
true
false
CASE 3 : Keyword & Message with Special Character
如果我收到以下消息并且关键字是#Hello
。我写了以下代码,但没有用。
public static void main(String[] args) {
String patternStr = "(?i)\\b#Hello\\b";
Pattern pattern = Pattern.compile(patternStr);
List<String> strList = new ArrayList<String>();
strList.add("HHello Message");
strList.add("This is #Hello Message ");
strList.add("Now Hellos again.");
for(String str : strList) {
Matcher matcher = pattern.matcher(str);
System.out.println(">> "+matcher.find());
}
}
输出:
>> false
>> false
>> false
预期输出:
>> false
>> true
>> false
我怎样才能逃避特殊字符并解决 CASE 2 and CASE 3
。
请帮忙。