关于正则表达式中几个方法的调用次序问题
我做了代码
(共四段,都有说明,前面三段我还能根据自己的理解为结果去做解释,但是到了第四段时(用问号?标记了)久不能解释下去了为,为什么啊。大侠们,帮帮忙啊)
(1)代码段1import java.util.regex.Matcher.
import java.util.regex.Pattern;public class TestRelex {

public static void main(String[] args) {
String regex = ".+";  //  一个或多个非换行字符
String str = "fafgajji";

Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
System.out.println(m.matches());

System.out.println(Pattern.matches(".+", "jdsiang"));  // 仅适用一次正则表达式
// 时, 等效于上面三句代码 
while(m.find()) {  //  此循环不会进入,因为前面调用matches()时指针已经
//  移至最右端
System.out.println(m.group());
}
}
}控制台打印结果如下:
true
true(2)代码段2
同样是该代码段(自是稍作改动):import java.util.regex.Matcher;
import java.util.regex.Pattern;public class TestRelex {

public static void main(String[] args) {
String regex = ".+";  //  一个或多个非换行字符
String str = "fafg\nji";  //  加了\n表示换行,即不再符合正则表达式的描述了 Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
System.out.println(m.matches());  //  调用结果为false,指针移至\n前面

while(m.find()) {  //  于是,m.find()找到的是ji段
System.out.println(m.group());
}
}
}
控制台打印结果为:
false
ji(3)代码段3
同样是该段代码(只是稍作改动)
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class TestRelex {

public static void main(String[] args) {
String regex = ".+";  //  一个或多个非换行字符
String str = "fafgnajji";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);

while(m.find()) {
System.out.println(m.matches());  //  matches()方法在此不影响group()
// 的调用
System.out.println(m.group());
}
}
}
控制台打印结果为
true
fafgnajji(4)代码段4
同样是该段代码(只是稍作改动)import java.util.regex.Matcher;
import java.util.regex.Pattern;public class TestRelex {

public static void main(String[] args) {
String regex = ".+";  //  一个或多个非换行字符
String str = "fafg\najji";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);

while(m.find()) {
System.out.println(m.group());
System.out.println(m.matches());  //  matches()方法调用在此,于是指针
     //   每次都会指向\n前,导致死循环
}
}
}
控制台打印结果:
ajji
false(死循环)
(5)代码段5
同样是该段代码(只是稍作改动)import java.util.regex.Matcher;
import java.util.regex.Pattern;public class TestRelex {

public static void main(String[] args) {
String regex = ".+";  //  一个或多个非换行字符
String str = "fafg\najji";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);

while(m.find()) {
    System.out.println(m.matches());  //  较代码四调换了此两行的顺序
                      //  抛异常?(为什么啊,不是matches()方法的调用时,指针会落到\n前        么,那么还是可以调用gruop()方法获得字段啊)
                                     System.out.println(m.group()); //  
}
}
}
控制台打印结果:
false
           (抛异常)Exception in thread "main" java.lang.IllegalStateException: No match found
       异常报在这一句 System.out.println(m.group());