Java match whole word in String(Java在字符串中匹配整个单词)
本文介绍了Java在字符串中匹配整个单词的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个ArrayList<String>
,我遍历它以查找给定字符串的正确索引。基本上,在给定一个字符串的情况下,程序应该搜索整个列表并找到与整个单词匹配的索引。例如:
ArrayList<String> foo = new ArrayList<String>();
foo.add("AAAB_11232016.txt");
foo.add("BBB_12252016.txt");
foo.add("AAA_09212017.txt");
因此,如果我给出字符串AAA
,我应该会得到索引2
(最后一个)。因此,我不能使用contains()
方法,因为那样会返回索引0
。
我尝试使用此代码:
String str = "AAA";
String pattern = "\b" + str + "\b";
Pattern p = Pattern.compile(pattern);
for(int i = 0; i < foo.size(); i++) {
// Check each entry of list to find the correct value
Matcher match = p.matcher(foo.get(i));
if(match.find() == true) {
return i;
}
}
不幸的是,此代码从未到达循环内的if
语句。我不确定我做错了什么。
注意:如果我搜索AAA_0921
、全名AAA_09212017.txt
或字符串中唯一的任何部分,也应该这样做。
推荐答案
由于单词字符和下划线之间的单词边界不匹配,您需要
String pattern = "(?<=_|\b)" + str + "(?=_|\b)";
在这里,(?<=_|)
正向后视需要在str
之前出现单词边界或下划线,而(?=_|)
正向前视需要在str
之后出现下划线或单词边界。
参见this regex demo。
如果您的单词中可能包含特殊字符,您可能需要使用更直接的单词边界:
"(?<![^\W_])" + Pattern.quote(str) + "(?![^\W_])"
这里,如果存在除下划线以外的单词字符,则负向查找(?<![^\W_])
匹配失败([^...]
是与该类中定义的字符、范围等之外的任何字符匹配的否定字符类,因此,它匹配除非单词字符W
和_
以外的所有字符),如果(?![^W_])
存在单词字符,则(?![^W_])
负向查找匹配失败。
请注意,第二个示例有一个带引号的搜索字符串,因此即使AA.A_str.txt
也可以与AA.A
很好地匹配。
参见another regex demo
这篇关于Java在字符串中匹配整个单词的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:Java在字符串中匹配整个单词
猜你喜欢
- Eclipse 的最佳 XML 编辑器 2022-01-01
- GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
- 未找到/usr/local/lib 中的库 2022-01-01
- 转换 ldap 日期 2022-01-01
- 获取数字的最后一位 2022-01-01
- 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
- 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
- 如何指定 CORS 的响应标头? 2022-01-01
- 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
- java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01