我需要帮助。我正在编写一个方法,如果1954
在字符串images/deal/129277/1954-bonus.jpg
中,它将返回true。我可以使用string.contains但它总是不准确。相反,如果1954年处于确切位置,我希望它返回true。 sourceKey下面是images/deal/129277/1954-bonus.jpg
,oldImageId是1954
。
下面的代码不起作用。
private boolean keyMatches(String sourceKey, String oldImageId){
Pattern pattern = Pattern.compile("(.*?)/(\\d+)/(\\d+)-(.*)");
Matcher matcher = pattern.matcher(sourceKey);
return oldImageId.equals(matcher.group(3));
}
答案 0 :(得分:2)
好像你想要这样的东西,
String s = "images/deal/129277/1954-bonus.jpg";
String oldImageId = "1954";
Matcher m = Pattern.compile("(.*?)/(\\d+)/(\\d+)-(.*)").matcher(s);
if(m.find())
{
System.out.println(oldImageId.matches(m.group(3)));
}
输出:
true
答案 1 :(得分:1)
尝试这样的事情:
public static void main(String[] args) {
String s = "images/deal/129277/1954-bonus.jpg";
String s1 = "images/deal/1954/1911254-bonus.jpg";
System.out.println(s.matches(".*/1954\\-.*"));
System.out.println(s1.matches(".*/1954\\-.*"));
}
O / P:
true
false
答案 2 :(得分:0)
我的代码中至少有一个错误。除非您之前调用find()
或match()
方法并且这些方法返回true
,否则匹配器不会返回任何组。
因此,您的代码应修改如下:
Matcher matcher = pattern.matcher(sourceKey);
return matcher.find() ? oldImageId.equals(matcher.group(3)) : null;
我留给你验证你的正则表达式确实是正确的。
答案 3 :(得分:0)
使用正则表达式预测和String#matches()
您的函数可以像
private boolean keyMatches(String sourceKey, String oldImageId){
return sourceKey.matches(".*/(?!.*/)"+oldImageId+"-.*");
}
我尝试使用放置在网址各个部分的1954
进行以下测试,以试图欺骗正则表达式。
System.out.println(keyMatches("images/deal/129277/1954-bonus.jpg", "1954"));
System.out.println(keyMatches("images/deal/1954-pics/129277-bonus.jpg", "1954"));
System.out.println(keyMatches("123-1954/1954-00/1954/129277-bonus.jpg", "1954"));
System.out.println(keyMatches("images/deal/129277/129277-1954-bonus.jpg", "1954"));
输出:
true
false
false
false