在上一篇正则表达式http://guidongyuan.cn/2017/07/09/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F中介绍了正则表达式的规则,这篇主要讲正则表达式在Java中几个类的使用。
JDK中,与正则表达式有关的类都在java.util,regex,主要是Pattern类和Matcher类,String类中也有分别方法可以使用正则表达式。
文章主要结合《java编程思想》和Java的开发文档,选取了日常开发中经常用到的方法进行分析,再自己编写用例熟悉其用法以及验证理解是否正确。
在正则表达式中用于转义,由于java对其有特殊的处理方式,如果需要插入一个需要使用,如正则表达式中的在java中为,插入一个普通的在java中为。
String类
匹配boolean matches(String regex)方法
判断整个字符串是否匹配regex表示的正则表达式
替换
String replace(char oldchar,char newchar)String replace(CharSequence target,CharSequence replacement)
replace() 没有用到正则表达式,第一个参数(被替换的字符)和第二个参数(替换的字符)都是普通字符
String replaceFirst(String regex,String replacement)
参数replacement根据regex正则表达式替换掉第一个匹配成功的部分
String replaceAll(String regex,String replacement)
参数replacement根据regex正则表达式替换掉所有匹配成功的部分
分割
String[] split(String regex)
根据regex进行分割,匹配到的字符不输出
String[] split(String regex,int limit)
limit限制了分割后的数组的数量,达到限制的数量后不再进行分割,直接输出
Pattern 和 Matcher类
基本用法
Pattern类
查找static Pattern compile(String regex)
通过设置正则表达式参数regex生成一个Pattern对象
Matcher matcher(CharSequence input)
通过传入要检索的字符串参数生成一个Matcher对象
static boolean matches()
检查regex是否匹配整个字符串,regex可以通过Pattern.compile(regex)设置,也可以直接通过Pattern类中的matches(regex,input)设置,可以参考上面的范例。
static Pattern compile(String regex,int flag)
compile()的另外一个方法,flag是Pattern中的标记,用于调整匹配的行为,常用的标记如下:
String flags() 和 int pattern()
flags()返回Pattern设置的flag,pattern()返回Pattern设置的regex
替换
Pattern类中的split()方法与String类中的使用一致,可以参考上面的String类
matcher类
查找boolean lookingat()
lookingAt()与matches()和find()类似,不过其只对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true
boolean find()
遍历字符串,查找多个匹配,匹配到就返回true,否则为false
boolean find(int index)
find带参数,表示该字符串中字符的位置,并以其作为搜索的起点
String group()
group表示组,group( )返回前一次匹配操作的第0组,也可以通过group(int i)指定返回在前一次匹配操作期间指定的组号,如果匹配成功,但是指定的组没有匹配输入字符串的任何部分,则返回null。
int groupCount()
返回分组的数目,第0组不包括在内
int start(int group)
返回在前一次匹配操作中寻找到的组的起始索引,start()和start(0)一致,为第0个分组。
int end(int group)
返回在前一次匹配操作中寻找到的组的最后一个字符索引加一的值
注意:
Matcher reset(CharSequence input)
将现有的Matcher对象应用于一个新的字符序列中,如果采用不带参数的reset()方法,可以将Mathcer对象重新设置到当前字符序列的起始位置。
Matcher appendReplacement(StringBuffer sb,String replacement)Matcher appendTail(StringBuffer sb)
appendReplacement()和replaceFirst()以及replaceAll()都是用来进行替代操作,区别在于不是使用一个固定的字符串replacement一次性进行替换,而是采用渐进式的替换。appendTail(),在执行了一次或多次appendReplacement()之后,调用此方法可以将输入字符串余下的部分复制到sb中。
领取专属 10元无门槛券
私享最新 技术干货