在Java开发中,有时候会进行一些字符串匹配,使用:
str.matches("\\d+")
其内部使用的Pattern的静态方法:
// input 对应 str
// regex 要匹配的模式
public static boolean matches(String regex, CharSequence input) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
return m.matches();
}
也有些时候,我们想要利用正则匹配从其中提取一些我们想要的内容,使用:
Pattern pattern = Pattern.compile("(\\d+)");
String input = "str1234str5678";
Matcher matcher = pattern.matcher(input);
while (matcher.find()){
int start = matcher.start();
int end = matcher.end();
System.out.println(input.substring(start,end));
}
注意:
matches与find返回的都是bool类型,所以在使用的时候可能在提取字符串时使用了matchers,得到了非预期的结果。
- matchers 匹配的是整个字符串,完整的匹配模式与字符是否相同。
- find 是查看字符串中是否出现了自己写的模式,只要有出现即可。
Pattern pattern = Pattern.compile("(\\d+)");
Stream.of("1234","abc1234abc","abc1234","1234abc")
.forEach(s -> {
Matcher matcher = pattern.matcher(s);
System.out.println(s + " find " + matcher.find());
System.out.println(s + " matches " + matcher.matches());
System.out.println("");
});
其它的也没什么东西了,只是搞混过matchers与find的概念,现在明白了这个点,知识点虽小,不过还是比较实用的。