gpt4 book ai didi

Java匹配字符串中的整个单词

转载 作者:搜寻专家 更新时间:2023-10-31 19:53:17 25 4
gpt4 key购买 nike

我有一个 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)";

在这里,(?<=_|\b) positive lookbehind 需要在 str 之前出现字边界或下划线, 和 (?=_|\b)正面前瞻要求在 str 之后立即出现下划线或单词边界.

参见 this regex demo .

如果您的单词内部可能有特殊字符,您可能希望使用更直接的单词边界:

"(?<![^\\W_])" + Pattern.quote(str) + "(?![^\\W_])"

在这里,负面回顾 (?<![^\\W_])如果存在除下划线以外的单词字符,则匹配失败( [^...] 是一个否定字符类,它匹配除此类中定义的字符、范围等之外的任何字符,因此,它匹配除非字符以外的所有字符字字符 \W 和一个 _ ),以及 (?![^\W_])如果 str 后有除下划线以外的单词 char,则否定前瞻会导致匹配失败.

注意第二个例子有一个带引号的搜索字符串,所以即使是AA.A_str.txt可以与 AA.A 很好地匹配.

参见 another regex demo

关于Java匹配字符串中的整个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38229378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com