正则取出字符串中不连续的符合条件的字符

我们知道在正则中如果要取出一串字符串中连续的字符可以使用?、+、*、{}等元字符

比如:"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++; } } }

这种写法是通过一个计数器来判断当前是否全部将符合要求的内容取消,还可以通过立个标志位来判断,看下面的源码:

package R;

import javax.imageio.ImageIO;
import javax.jws.Oneway;

public class Demo2 {

    public static void main(String a[]) {
        String s = "432ef2w4kl4ej5431";
        String rex = "[A-Za-z]+";
        // 定义一个标志位用于判断当前获取的值是否是符合要求的
        boolean flag = true;

        Pattern p = Pattern.compile(rex);
        Matcher m = p.matcher(s);

        // 当前读取的个数小于字符串长度时继续读取
        while (flag) {

            if (m.find()) {
                System.out.print(m.group().toString());
            } else {
                flag = false;
            }

        }

    }

}

上面两种方法的实现效果是一样的,下面是实现效果图

可以看到最终的输出结果是正确的

原文地址:https://www.cnblogs.com/lyd447113735/p/8717972.html