我们知道在正则中如果要取出一串字符串中连续的字符可以使用?、+、*、{}等元字符
比如:"432efwklej5431"中我需要取出"efwklej"只需要[A-Za-z]+就可以实现效果。
public class r {
public static void main(String[] args) {
String s = "432efwklej5431";
String rex = "[A-Za-z]+";
Pattern p = Pattern.compile(rex);
Matcher m = p.matcher(s);
if(m.find()) {
System.out.print(m.group().toString());
}
}
}
但是假如efwklej是不连续的字符又该怎么取出呢?我们都知道?、+、*、{}这几个元字符都是对连续的字符起效果的,如果把"432efwklej5431"换成"432ef2w4kl4ej5431",上面的写法是不能取出这串字符串中的所有字母的,几个字母间被数字隔开了。
换个思路,既然不能连续的取出字母,那就一个一个的把字符取出来判断,如果是字母就进行输出,直到取到字符串中的最后一个字符
public class r {
public static void main(String[] args) {
String s = "432ef2w4kl4ej5431";
String rex = "[A-Za-z]+";
// 定义一个变量用于储存当前读取个数
int count = 0;
Pattern p = Pattern.compile(rex);
Matcher m = p.matcher(s);
// 当当前读取的个数小于字符串长度时继续读取
while(count<s.length()) {
if(m.find()) {
System.out.print(m.group().toString());
count++;
}
}
}
}
可以看到最终的输出结果是正确的