博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java的Pattern类
阅读量:6693 次
发布时间:2019-06-25

本文共 2939 字,大约阅读时间需要 9 分钟。

在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 stub32         System.out.println(s+":  我的名字是:"+name+",我的年龄是:"+age);33     }34     35      36  }37  38  //聊天&唱歌,代理类39  class TalkSing implements Italk40  {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 stub66 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);    }

 

转载于:https://www.cnblogs.com/changhe1995/articles/10367564.html

你可能感兴趣的文章
不受控制的 position:fixed
查看>>
Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖
查看>>
精简版—愤慨的小鸟
查看>>
Testing for SSL renegotiation
查看>>
牛客网Java刷题知识点之自动拆装箱
查看>>
一键部署Moodle开源课程管理系统
查看>>
SQL Server 数据库引擎怎样记录完整备份后修改过的数据
查看>>
[C#] .NET Core项目修改project.json来引用其他目录下的源码等文件的办法 & 解决多框架时 project.json 与 app.config冲突的问题...
查看>>
使用 Swift 3.0 操控日期
查看>>
使用InstallShield打包VS程序
查看>>
到底什么是nandflash,norflash,sdram,emmc,rom,ram【转】
查看>>
list集合去除重复对象的实现
查看>>
锚点 与 scrollIntoView()
查看>>
api日常总结:前端常用js函数和CSS常用技巧
查看>>
Redis在windows下安装过程
查看>>
线程管理-同步变量-同步变量体系
查看>>
plsql developer ini
查看>>
springboot整合mybatis(SSM开发环境搭建)
查看>>
Oracle性能优化之查询语句通用原则
查看>>
Eclipse集成ijkplayer并实现本地和网络视频播放等
查看>>