write RE validation

在Java中,我们为了查找某个给定字符串中是否有需要查找的某个字符或者子字串、或者对字符串进行分割、或者对字符串一些字符进行替换/删除,一般会通过if-else、for 的配合使用来实现这些功能 。如下所示:

 

Java代码  收藏代码
  1. public class Test{  
  2.   public static void main(String args[]) {  
  3.          String str="@Shang Hai Hong Qiao Fei Ji Chang";  
  4.          boolean rs = false;  
  5.          for(int i=0;i<str.length();i++){  
  6.                 char z=str.charAt(i);    
  7.                 if('a' == z || 'F' == z) {  
  8.                        rs  = true;  
  9.                        break;  
  10.                 }else{  
  11.                        rs= false;  
  12.                 }  
  13.          }     
  14.          System.out.println(rs);  
  15.        }  
  16. }  

      这种方法使用简单直观,但是 难以解决复杂的工作,而且代码量也会增加很多,不利于维护。

 

      这时,我们可以使用正则表达式来实现这些功能,而且代码简单易维护。下面就来介绍了Java中对字符串的正则表达式的几个常用的功能,具体情况如下所示(其中用到了java.util.regex包):

 

1.Java中在某个字符串中查询某个字符或者某个子字串

Java代码  收藏代码
  1. String s = "@Shang Hai Hong Qiao Fei Ji Chang";     
  2. String regEx = "a|F"; //表示a或F  
  3. Pattern pat = Pattern.compile(regEx);  
  4. Matcher mat = pat.matcher(s);  
  5. boolean rs = mat.find();   

    如果s中有regEx,那么rs为true,否则为flase。

    如果想在查找时忽略大小写,则可以写成Pattern pat=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);

 

2.在某个文件中获取一段字符串

Java代码  收藏代码
  1. String regEx = ".+\(.+)$";  
  2. String s = "c:\test.txt";  
  3. Pattern pat = Pattern.compile(regEx);  
  4. Matcher mat = pat.matcher(s);  
  5. boolean rs = mat.find();  
  6. for(int i=1;i<=mat.groupCount();i++){  
  7.   System.out.println(mat.group(i));  
  8. }   

  以上的执行结果为test.txt,提取的字符串储存在mat.group(i)中,其中i最大值为mat.groupCount();

 

3.对字符串的分割

Java代码  收藏代码
  1. String regEx=":";  
  2. Pattern pat = Pattern.compile(regEx);  
  3. String[] rs = pat.split("aa:bb:cc");   

  执行后,r就是{"aa","bb","cc"}

    如果用正则表达式分割就如上所示,一般我们都会使用下面更简单的方法:

Java代码  收藏代码
  1. String s = "aa:bb:cc";  
  2. String[] rs=s.split(":");   

 

4.字符串的替换/删除

Java代码  收藏代码
  1. String regEx="@+"; //表示一个或多个@  
  2. Pattern pat=Pattern.compile(regEx);  
  3. Matcher mat=pat.matcher("@@aa@b cc@@");  
  4. String s=mat.replaceAll("#");   

 结果为"##aa#b cc##"
  
 如果要把字符串中的@都给删除,只用要空字符串替换就可以了:

Java代码  收藏代码
  1. String s=mat.replaceAll("");  

  结果为"aab cc"

 

 

注:对Pattern类的说明: 
      1.public final class java.util.regex.Pattern是正则表达式编译后的表达法。

      下面的语句将创建一个Pattern对象并赋值给句柄pat:Pattern pat = Pattern.compile(regEx);
      有趣的是,Pattern类是final类,而且它的构造器是private。也许有人告诉你一些设计模式的东西,或者你自己查有关资料。这里的结论是:Pattern类不能被继承,我们不能通过new创建Pattern类的对象。
       因此在Pattern类中,提供了2个重载的静态方法,其返回值是Pattern对象(的引用)。如:

Java代码  收藏代码
  1. public static Pattern compile(String regex) {  
  2.         return new Pattern(regex, 0);  
  3. }  

       当然,我们可以声明Pattern类的句柄,如Pattern pat = null;

 

    2.pat.matcher(str)表示以用Pattern去生成一个字符串str的匹配器,它的返回值是一个Matcher类的引用。
       我们可以简单的使用如下方法:boolean rs = Pattern.compile(regEx).matcher(str).find();

posted @ 2019-03-28 08:36  寅狗  阅读(134)  评论(0编辑  收藏  举报