java语义定量符号常用find
import Matcher;
import Pattern;
public class Test {
public static void main (String[] args) {
Pattern p = Pattern pile ("\\d{3,5}");
Matcher m = p.matcher("123-4567812-910-11");
printf输出格式java/*print (m.matches ());
m.reset ();*/
print (m.find ());//true
print (m.group ());//123
print (m.start ()+"-"+m.end ());//0-3:1~-
System.out.printf("换行--------------------\n");
print (m.find ());//true
print (m.group ());//45678
print (m.start ()+"-"+m.end ());//4-9:4~1
System.out.printf("换行--------------------\n");
print (m.find ());//true
print (m.group ());//910
print (m.start ()+"-"+m.end ());//12-15:9~-
System.out.printf("换行--------------------\n");
print (m.find ());//false
System.out.printf("换行--------------------\n");
System.out.println ();
print (m.matches ());//false
System.out.printf("换行\n");
//m.reset ();
print (m.find ());//true
print (m.group ());//45678
print (m.start ()+"-"+m.end ());//4-9
System.out.printf("换行\n");
print (m.find ());//true
print (m.group ());//910
print (m.start ()+"-"+m.end ());//12-15
System.out.printf("换行\n");
print (m.find ());//false
System.out.printf("换行\n");
print (m.find ());//false
System.out.printf("换行\n");
System.out.println ();
print (m.matches ());//false
System.out.printf("换行\n");
m.reset ();
print (m.find ());//true
print (m.group ());//123
print (m.start ()+"-"+m.end ());//0-3
System.out.printf("换行\n");
print (m.find ());//true
print (m.group ());//45678
print (m.start ()+"-"+m.end ());//4-9
System.out.printf("换行\n");
print (m.find ());//true
print (m.group ());//910
print (m.start ()+"-"+m.end ());//12-15
System.out.printf("换行\n");
print (m.find ());//false
System.out.printf("换行\n");
System.out.println ();
print (m.lookingAt ());//true
print (m.lookingAt ());//true}
public static void print (Object o) {
System.out.println (o);}}/**
1、对这个程序的解释:这个程序最大的难点在于find()方法的理解
2、在第一段程序中,find会一个字符一个字符的匹配,当检测到3的时候,发现已经有3个字符,那么这个find可以返回true了,但是没有完,它会继续检测,发现3的后面是-而不是数字,第一个find的结束,所以在group这个里输出123,从0到3(注意下标是从0开始的)
3、第二个find从下标为3的字符开始,也就是上次find结束的地方,那么这个find一上来就到-,会不会因此而返回false,答案是不会,它会继续往后面,看能不能在后面的字符串中到符合条件的字符串片段,很幸运,它到了,那就是45678,因为指定的字符串
4、片段的上限长度为5,所以在group输出45678而不是4567812,那么下标的始末为什么是4-9而不是4-8呢?虽然字符串片段的指定上限是5,但并不会因此就不继续往后面检查一位。
5、第三个find从下标为9的地方开始,1,2,-,发现都不行,继续!9,1,0,-发现满足条件了,返回true,同时group里输出910,下标又为什么从12开始呢?因为find从下标为12处才到满足条件的字符串片段。
6、第四个find很可怜,-,1,1都不满足,后面又没有字符串了,所以只好返回false了、
7、为什么加了matches和reset后输出结果又变得不一样了?先从matches说起,matches要求全部匹配才能返回true,但是很不幸字符串的长度一看就不止5个字符,所以返回false是毫无疑问的。具体来说,matches也是一个字符一个字符检查的,当他检查到第一个“-”时发现
8、不是数字了,所以返回了false(但是就算全部是数字也返回false,就如上面所说的),关键是这个matches对后面的find有影响,因为find是从matches停止位开始检查的,就像下一个find是从上一个find停止位开始检查的一样,所以输出结果和上一段不一样了。
9、但是加了reset后,匹配器被重置,就相当于find可以从字符串的第一个字符开始检查了。
10、lookingAt()是每一次都从头开始检查是不是符合要求,不管有多少个lookingAt(),而123是符合要求的,所以会输出true
11、注意只有匹配成功,才可以通过 start、end 和 group 方法获取更多信息。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论