我需要检查给定的String是否以正则表达式字符串结尾。我写了以下代码:
public static void main(String[] args) {
String str = "wf-008-dam-mv1";
String regex = "mv(\\d)?$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if(matcher.find() && matcher.end() == str.length()) {
System.out.println("Ends with true");
} else {
System.out.println("Ends with false");
}
}
此处str
可以有或没有数字结束。这是一个好方法吗?
答案 0 :(得分:4)
这是一种非常合理的方式,除了matcher.end() == str.length()
检查是多余的。 $
正则表达式锚点已经处理好了。
答案 1 :(得分:3)
由于$
锚已经确保模式必须在最后匹配,因此简单的find
就足够了;你不需要验证比赛的结束。如果您使用.*
添加模式,则可以使用matches
而非find
,这样您就可以删除整个模板:
boolean endsWith="wf-008-dam-mv1".matches(".*mv(\\d)?$");
System.out.println("Ends with "+endsWith);
这就是你所需要的......
答案 2 :(得分:1)
matcher.find()
为您完成工作,无需查看matcher.end() == str.length()
API说
If the match succeeds then more information can be obtained via the start, end, and group methods