import java.util.regex.Matcher; import java.util.regex.Pattern; public class Example03 { public static void main(String[] args){ Pattern p=Pattern.compile("\\d+"); Matcher m=p.matcher("3344abb"); System.out.println("字符串是否匹配:"+m.matches()); Matcher m2=p.matcher("2333"); System.out.println("字符串是否匹配:"+m2.matches()); System.out.println("对前面的字符串匹配结果为:"+m.lookingAt()); Matcher m3=p.matcher("bc2333"); System.out.println("对前面的字符串的匹配结果为:"+m3.lookingAt()); m.find(); System.out.println("字符串任何位置是否匹配:"+m.find()); m3.find(); System.out.println("字符串任何位置是否匹配:"+m3.find()); Matcher m4=p.matcher("bcbd"); System.out.println("字符串任何位置是否匹配:"+m4.find()); Matcher m1=p.matcher("ccc2333ddd"); m1.find(); System.out.println("上一个匹配的起始索引:"+m1.start()); System.out.println("最后一个字符匹配后的偏移量"+m1.group()); } }为什么第一次执行m.find()和m3.find()的值为true,第二次执行m.find()和m3.find()的值为false
时间: 2024-02-19 16:00:20 浏览: 67
Java记事本_java记事本_java6007.cOm_
第一次执行m.find()和m3.find()的值为true,是因为在输入字符串"3344abb"和"bc2333"中都存在匹配正则表达式"\d+"的部分,即"3344"和"2333",因此第一次执行find()方法时可以匹配到这些部分,返回值为true。
而第二次执行m.find()和m3.find()的值为false,则是因为在上一次执行find()方法后,匹配的起始位置已经改变了,不再是整个输入字符串的起始位置,而是上一次匹配成功的部分的下一个位置。在输入字符串"3344abb"中,第一次匹配成功的位置是0,而第二次查找时,匹配的起始位置从下标1开始,因此无法匹配到任何数字字符,返回值为false。同理,在输入字符串"bc2333"中,第一次匹配成功的位置是2,而第二次查找时,匹配的起始位置从下标3开始,也无法匹配到任何数字字符,返回值为false。
阅读全文