我们知道在正则中如果要取出一串字符串中连续的字符可以使用?、+、*、{}等元字符
比如:"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++; } } } }
可以看到最终的输出结果是正确的
原文地址:https://www.cnblogs.com/lyd447113735/p/8717972.html
时间: 2024-10-18 11:30:24