我有一个小字符串,如:"OT-0*02"
我有一个“数据库”,我有完整的字符串"OT-0502"
和"OT-0602"
。
我需要根据用户输入找到这些,这看起来像上面的第一个字符串,星标记未知字符,它可能在任何地方。
我该怎么做呢?我曾经尝试过使用Pattern.matches ......以及正则表达式的东西,但它似乎没有给我任何解决方案。
这是我到目前为止所得到的
rsz="OT-0*02";
int cv = 0;
while (cv < jarmu.size()-1){
if (Pattern.matches(jarmu.get(cv).substring(9), rsz)) {
System.out.println("fasz");
}
cv++;
}
答案 0 :(得分:-1)
听起来你只想要一个简单的通配符搜索,其中*匹配任何字符。为此,将用户输入中的所有*更改为。,并转义其他所有内容。然后你可以将它用作模式。
String userPattern = "O*-0*02";
String[] parts = userPattern.split("\\*", -1);
for (int i = 0; i < parts.length(); i++) parts[i] = "\\Q" + parts[i] + "\\E";
userPattern = String.join(".", parts);
然后使用****.matches(userPattern)
检查字符串是否与模式匹配。
基本上,您希望*
表示“匹配任何单个字符”,但在正则表达式中,.
执行此功能,因此您将*
替换为.
s。但是,您不希望将任何其他内容解释为特殊字符,因此该字符串在*
s处被分解为部分,并且使用\Q
和{{1}引用每个部分删除任何特殊含义,然后将\E
s与.
s放在一起。 -1表示字符串末尾的*
不会丢失。