码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-04-04 16:45:21      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:字符串长度   ++   bubuko   style   pat   void   while   读取   输出   

 

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

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

    }

}

 

技术分享图片

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

 

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

标签:字符串长度   ++   bubuko   style   pat   void   while   读取   输出   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!