我有用户输入的关键字列表,它们可能包含特殊字符等$, #, @, ^, &,
.
根据我的要求,当我收到短信列表时,我需要搜索每条短信中的所有关键字.
我们需要匹配完全关键字.
案例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());
}
}
Run Code Online (Sandbox Code Playgroud)
按预期输出
>> false
>> true
>> false
Run Code Online (Sandbox Code Playgroud)
案例2:简单关键字 - 具有特殊字符的消息
现在,如果我在跟踪消息上面运行相同的代码,那么它没有按预期工作.
List<String> strList = new ArrayList<String>();
strList.add("#Hello Message");
strList.add("This is Hello Message ");
strList.add("Now Hellos again.");
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
true
true
false
Run Code Online (Sandbox Code Playgroud)
预计输出
false
true
false
Run Code Online (Sandbox Code Playgroud)
案例3:具有特殊字符的关键字和消息
如果我收到以下消息,关键字是#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());
}
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
>> false
>> false
>> false
Run Code Online (Sandbox Code Playgroud)
预期产量:
>> false
>> true
>> false
Run Code Online (Sandbox Code Playgroud)
我怎样才能逃脱特殊角色并解决 CASE 2 and CASE 3
.
请帮忙.
情况 2 似乎与情况 3 相反,所以我认为您不能将Pattern
s 结合起来。
对于情况 2,您的Pattern
情况可能如下所示:
Pattern pattern = Pattern.compile("(\\s|^)Hello(\\s|$)", Pattern.CASE_INSENSITIVE);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们用空格或输入的开头/结尾包围关键字。
对于情况 3,您的Pattern
内容可能如下所示:
Pattern pattern = Pattern.compile("[\\$#@\\^&]Hello(\\s|$)", Pattern.CASE_INSENSITIVE);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们在关键字之前添加您选择的任何特殊字符(请注意转义的保留字符$
和^
),然后我们接受空格或输入结尾作为关键字后面的字符。
归档时间: |
|
查看次数: |
21186 次 |
最近记录: |