简体   繁体   中英

Java regex, matches and find

I am still having problems understanding difference in matches() and find(), here the code

final Matcher subMatcher = Pattern.compile("\\d+").matcher("123");
System.out.println("Found : " + subMatcher.matches());
System.out.println("Found : " + subMatcher.find());

Output is

Found : true Found : false

Of what I understand about matches and find from this answer , is that matches() tries to match the whole string while find() only tries to match the next matching substring, and the matcher adds a ^ and $ meta-character to start and beginning and the find() can have different results if we use it multiple no of times, but here still 123 remains a substring, and the second output should be true. If i comment out the second line then it does shows output as true

When you call matches() , the Matcher already searches for a match (the whole String ). Calling find the Matcher will try to find the pattern again after the current match, but since there are no characters left after a match that matches the entire String , find returns false .

To search the String again, you'd need to create a new Matcher or call reset() :

final Matcher subMatcher = Pattern.compile("\\d+").matcher("123");
System.out.println("Found : " + subMatcher.matches());
subMatcher.reset();
System.out.println("Found : " + subMatcher.find());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM