当前位置:编程学习 > JAVA >>

Java常用类库--正则表达式(Pattern类、Matcher类)

[java]  
public class RegexDemo01{  
    public static void main(String args[]){  
        String str = "1234567890" ;     // 此字符串由数字组成  
        boolean flag = true ;           // 定义一个标记变量  
        // 要先将字符串拆分成字符数组,之后依次判断  
        char c[] = str.toCharArray() ;  // 将字符串变为字符数组  
        for(int i=0;i<c.length;i++){ // 循环依次判断  
            if(c[i]<'0'||c[i]>'9'){       // 如果满足条件,则表示不是数字  
                flag = false ;          // 做个标记  
                break ;                 // 程序不再向下继续执行  
            }  
        }  
        if(flag){  
            System.out.println("是由数字组成!") ;  
        }else{  
            System.out.println("不是由数字组成!") ;  
        }  
    }  
};  
 
基本思路:就是将字符串拆分,之后一个个的进行比较的验证,但是这样比较麻烦,而且现在只是验证是否由数字组成,如果更加复杂的呢?
此时,将代码换成正则表达式,再观察效果;
[java]  
import java.util.regex.Pattern ;  
public class RegexDemo02{  
    public static void main(String args[]){  
        String str = "1234567890" ;     // 此字符串由数字组成  
        if(Pattern.compile("[0-9]+").matcher(str).matches()){   // 使用正则  
            System.out.println("是由数字组成!") ;  
        }else{  
            System.out.println("不是由数字组成!") ;  
        }  
    }  
};  
 
2、Pattern、Matcher类
 
 
 
 
以上的正则,如果要想驱动起来,则必须依靠Pattern类和Matcher类。
Pattern主要是表示一个规则的意思,即:正则表达式的规则需要在Pattern类中使用。
Matcher类主要表示使用Pattern指定好的验证规则。
 
 
 
 
 
[java]  
import java.util.regex.Pattern ;  
import java.util.regex.Matcher ;  
public class RegexDemo03{  
    public static void main(String args[]){  
        String str = "1983-07-27" ;     // 指定好一个日期格式的字符串  
        String pat = "\\d{4}-\\d{2}-\\d{2}" ;   // 指定好正则表达式  
        Pattern p = Pattern.compile(pat) ;  // 实例化Pattern类  
        Matcher m = p.matcher(str) ;    // 实例化Matcher类  
        if(m.matches()){        // 进行验证的匹配,使用正则  
            System.out.println("日期格式合法!") ;  
        }else{  
            System.out.println("日期格式不合法!") ;  
        }  
    }  
};  
 
在Pattern类中也可以使用正则进行字符串的拆分功能。
[java]  
import java.util.regex.Pattern ;  
import java.util.regex.Matcher ;  
public class RegexDemo04{  
    public static void main(String args[]){  
        // 要求将里面的字符取出,也就是说按照数字拆分  
        String str = "A1B22C333D4444E55555F" ;  // 指定好一个字符串  
        String pat = "\\d+" ;   // 指定好正则表达式  
        Pattern p = Pattern.compile(pat) ;  // 实例化Pattern类  
        String s[] = p.split(str) ; // 执行拆分操作  
        for(int x=0;x<s.length;x++){  
            System.out.print(s[x] + "\t") ;  
        }  
    }  
};  
 
还可以使用Matcher类中的字符串替换功能。
范例:将字符串中的全部数字替换成“_”
[java]  
import java.util.regex.Pattern ;  
import java.util.regex.Matcher ;  
public class RegexDemo05{  
    public static void main(String args[]){  
        // 要求将里面的字符取出,也就是说按照数字拆分  
        String str = "A1B22C333D4444E55555F" ;  // 指定好一个字符串  
        String pat = "\\d+" ;   // 指定好正则表达式  
        Pattern p = Pattern.compile(pat) ;  // 实例化Pattern类  
        Matcher m = p.matcher(str) ;    // 实例化Matcher类的对象  
        String newString = m.replaceAll("_") ;  
        System.out.println(newString) ;  
    }  
};  
 
3、String类对正则的支持
从之前的操作中,可以发现,很多的代码除了要求的字符串不同,使用的正则规则不同,基本上就没有什么特别的了。
所以在JDK1.4之后,Java对正则进行了一些扩充,在String中开始直接支持正则的操作。
 
[java]  
import java.util.regex.Pattern ;  
import java.util.regex.Matcher ;  
public class RegexDemo06{  
    public static void main(String args[]){  
        String str1 = "A1B22C333D4444E55555F".replaceAll("\\d+","_") ;  
        boolean temp = "1983-07-27".matches("\\d{4}-\\d{2}-\\d{2}") ;  
        String s[] = "A1B22C333D4444E55555F".split("\\d+") ;  
        System.out.println("字符串替换操作:" + str1) ;  
        System.out.println("字符串验证:" + temp) ;  
        System.out.print("字符串的拆分:") ;  
        for(int x=0;x<s.length;x++){  
            System.out.print(s[x] + "\t") ;  
        }  <
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,