gpt4 book ai didi

java - 字符串匹配不适用于特殊字符 "/"

转载 作者:行者123 更新时间:2023-11-30 10:46:03 25 4
gpt4 key购买 nike

我有一个要求,我需要根据过滤器中提供的数据匹配并列出一些对象。
用户还可以输入匹配的正则表达式。

例如:
作为字符串列表,我有:"test","detest","test0/1/1"

过滤器 1:
"te" ---> 打印列表中的所有元素

过滤器 2:
"te*" ---> 只打印 "test","detest"而不是第三个元素。

我也想匹配字符“/

我希望以下过滤器也能给我匹配的结果:

te*0/*

*st*

到目前为止我尝试过的代码片段:

import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

public class StringMatch {

static List<String> values = Arrays.asList("test","detest","test0/1/1");

public static Collection<String> query(String queryStr, List<String> values) {
String orgQueryStr = queryStr;
queryStr = queryStr.replaceAll("\\*", "\\\\w*");
queryStr = "\\w*" + queryStr + "\\w*";
System.out.println(queryStr);
List<String> list = new ArrayList<String>();
for (int i = 0; i < values.size(); i++) {
String str = values.get(i);
String str1 = str.toLowerCase();
//System.out.println("Search string : " + str1 + " QueryString : " + queryStr + " Original : " + orgQueryStr);
if (str1.matches(queryStr) || str1.contains(orgQueryStr)){
//System.out.println("Matched !!");
list.add(str);
}
else{
//System.out.println("Did not match " + str1);
}
}
if (list.isEmpty())
return null;
else
return list;
}

public static void main(String[] args) {
String queryStr = "te*";
System.out.println(URLDecoder.decode(queryStr));
queryStr = URLDecoder.decode(queryStr);
System.out.println(query(queryStr.toLowerCase(), values));
}
}

最佳答案

\w不匹配/,它只匹配字母数字和一个下划线字符。

通过查看您的代码,我相信您希望将 any 字符与过滤器中的 * 匹配。 ..

可以匹配除换行符之外的任何字符

使用

queryStr= queryStr.replaceAll("\\*+", ".*");
queryStr = ".*" + queryStr + (queryStr.endsWith(".*") ? "" : ".*");

参见 IDEONE demo

如果过滤器中的 * 应该只匹配除空格以外的任何字符,请使用 \S 而不是 :

queryStr= queryStr.replaceAll("\\*", "\\\\S*");
queryStr = "\\S*" + queryStr + (queryStr.endsWith("\\S*") ? "" : "\\S*");

关于java - 字符串匹配不适用于特殊字符 "/",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36762539/

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