java的Pattern類


在JDK 1.4中,Java增加了對正則表達式的支持。

java與正則相關的工具主要在java.util.regex包中;此包中主要有兩個類:PatternMatcher

下面先說一下Pattern類:

public  final class Pattern implements java.io.Serializable

Pattern類由final修飾,可知其不可被繼承,代理模式(java23種常用設計模式之一)類,正則表達式的編譯表示形式。

注意:此類的實例是不可變的,可供多個並發線程安全使用。

代理模式簡單的理解就是有一群人只會說話,但在這群人中有些人會唱歌,所以要添加代理類唱歌。但如果要在原先的實現類加上唱歌的方法就會讓代碼重用性低,耦合性高。這時用代理的方法則很好的解決了這個問題。

(引用網上例子)假設有一個Italk接口,有空的方法talk()(說話),所有的OnlyTalk對象都實現(implements)這個接口,實現talk()方法,前端有很多地方都將OnlyTalk實例化,執行talk方法,后來發現這些前端里有一些除了要說話以外還要唱歌(sing),那么我們既不能在Italk接口里增加sing()方法,又不能在每個前端都增加sing方法,我們只有增加一個代理類TalkSing,這個代理類里實現talk和sing方法,然后在需要sing方法的客戶端調用代理類即可,代碼如下:

 1  interface Italk
 2 {
 3     
 4     public void talk(String st);
 5 }
 6  
 7  //Italk實現類
 8  class OnlyTalk implements Italk
 9  {
10      public String name;
11      public int age;
12     public String getName() {
13         return name;
14     }
15     public void setName(String name) {
16         this.name = name;
17     }
18     public int getAge() {
19         return age;
20     }
21     public void setAge(int age) {
22         this.age = age;
23     }
24     public OnlyTalk(String name,int age)
25     {
26         this.name=name;
27         this.age = age;
28     }
29     
30     public void talk(String s) {
31         // TODO Auto-generated method stub
32         System.out.println(s+":  我的名字是:"+name+",我的年齡是:"+age);
33     }
34     
35      
36  }
37  
38  //聊天&唱歌,代理類
39  class TalkSing implements Italk
40  {
41      OnlyTalk talker;
42      public String song;
43      public TalkSing(OnlyTalk talker)
44      {
45          this.talker=talker;
46      }
47      public void talk(String ss)
48      {
49          talker.talk(ss);
50      }
51      public void talk(String ss,String song)
52      {
53          talker.talk(ss);
54          sing(song);
55      }
56      private void sing(String song)
57      {
58          System.out.println("我唱的是"+song+"歌");
59      }
60  }
61  //應用端
62 public class SingTalk {
63 
64     public static void main(String[] args) {
65         // TODO Auto-generated method stub
66 
67         OnlyTalk people = new OnlyTalk("華為",20);
68         people.talk("沒有代理");
69         System.out.println();
70         TalkSing peopleplus = new TalkSing(people);
71         peopleplus.talk("添加代理", "好運來");
72     }
73 
74 }

獲得Pattern實例方法,Pattern構造方法是私有的,因此不能通過new創建實例。

//Pattern構造器:
private Pattern(String p, int f) {
        pattern = p;
        flags = f;

        // Reset group index count
        capturingGroupCount = 1;
        localCount = 0;

        if (pattern.length() > 0) {
            compile();
        } else {
            root = new Start(lastAccept);
            matchRoot = lastAccept;
        }
    }

由下面方法可得Pattern實例,利用compile()返回Pattern實例:Pattern pattern = Pattern.compile(String regex);

方法一: 
public static Pattern compile(String regex) {
        return new Pattern(regex, 0);
    }
方法二:
 public static Pattern compile(String regex, int flags) {
        return new Pattern(regex, flags);
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM