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在字符串中匹配整个单词
基础教程推荐
猜你喜欢
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01