引言
String这个对于程序原来说一定是最熟悉不过的,很多时候我们都习惯去使用String的原生方法去完成查找字符串、替换、删除,而正则表达式由于略显苦涩的语法常常被人忽略,其实很多时候使用正则表达式可以提高不少性能和节省资源。
一、正则表达式简述
正则表达式正则表达是Java中比较矛盾的知识点,因为使用起来可以很简单也可以相当地有难度,但是对于字符串操作来说应用得当则事半功倍,字符串查找,搜索,匹配,替换等等,正则表达式无所不能。而所谓正则表达式本质就是一个字符串(这个字符串按照一定的语法和规范被构造出来作为限定条件),其主要参与者——Pattern和Matcher:Pattern是Java正则表达式API中的主要入口,是程序语言中对这个特殊正则字符串的编译表示,需要使用正则表达式,第一步都是从构造Pattern 类开始,而Matcher是输入字符串进行解释和匹配操作的引擎,通过解释 Pattern 对 Character sequence 执行匹配操作(即Matcher负责完成字符串的查找、匹配、替换等操作。)
二、正则表达式基本语法
1、预留字符
限定符
说明
2、设置指定限定条件**[]**(即“[]”表示的是中括符里的内容是条件)
限定符
说明
3、边界匹配
边界符
说明
4、逻辑操作符和量词表示
正则表达式支持少量的逻辑运算(与,或)。与操作是默认的,表达式 cmo,意味着c 与 m与o。
或操作需要显示指定,用 | 表示。例如表达式 crazy|mo意味着crazy或 mo。
贪婪模式
饥饿模式
独占模式
:说明:
可参考表达式全集
三、正则表达式的应用
编译正则表达式的字符串值构造对应的模式Pattern对象
创建匹配给定输入与此模式的匹配器Matcher
通过匹配器对象执行操作,匹配器对象的方法很丰富,互相组合使用更加强大(JDK在线API)
1、去掉字符串中的空格和换行符
public static String getNonBlankStr(String str) { if(str!=null && !"".equals(str)) { Pattern pattern = Pattern.compile("\\s*|\t|\r|\n"); //去掉空格符合换行符 Matcher matcher = pattern.matcher(str); String result = matcher.replaceAll(""); return result; }else { return str; } }
2、去掉指定特殊字符
public static String StringFilter(String str) throws PatternSyntaxException { // String regEx = "[^a-zA-Z0-9]"; // 只允许字母和数字 // 清除掉所有特殊字符(除了~之外) String regEx="[`!@#$%^&*()+=|{}':;',//[//].<>/?!@#¥%……&*()——+|{}【】‘;:”“'。,、?]"; Pattern pattern = Pattern.compile(regEx); Matcher matcher = pattern.matcher(str); return matcher.replaceAll("").trim(); }
3、Pattern.matches()检查字符串中是否存在指定字符
public static String StringFilter(String str) throws PatternSyntaxException { // String regEx = "[^a-zA-Z0-9]"; // 只允许字母和数字 // 清除掉所有特殊字符(除了~之外) String regEx="[`!@#$%^&*()+=|{}':;',//[//].<>/?!@#¥%……&*()——+|{}【】‘;:”“'。,、?]"; Pattern pattern = Pattern.compile(regEx); Matcher matcher = pattern.matcher(str); return matcher.replaceAll("").trim(); }
4、Pattern.split()用正则表达式作为分隔符,把文本分割为String类型的数组
/** * 结果:element = grjk Text element = wwwdsf element = Many element = egsdg r geg */ String text = "A reg grjk Text reg wwwdsf reg Many reg egsdg r geg"; String patternString = "reg"; Pattern pattern = Pattern.compile(patternString); String[] split = pattern.split(text); for(String element : split){ System.out.println("element = " + element); }
5、Matcher 实例的find() + start() + end()寻找字符串中指定字符串出现的次数和起始和结束的索引位置
/** *结果:found: 1 : 2 - 4 found: 2 : 5 - 7 found: 3 : 23 - 25 found: 4 : 70 - 72 */ String text ="This is the text which is to be searched " +"for occurrences of the word 'is'."; String patternString = "is"; Pattern pattern = Pattern.compile(patternString); Matcher matcher = pattern.matcher(text); int count = 0; while(matcher.find()) { count++; System.out.println("found: " + count + " : " + matcher.start() + " - " + matcher.end()); }
6、Matcher 匹配指定格式的特殊字符串
Pattern pattern = Pattern.compile("[0-9]*");//判断是否都是数字 Matcher isNum = pattern.matcher("1123是数字"); if(isNum.matches()) { System.out.println("全部是数字"); } else { System.out.println("有汉字"); } //匹配任意字符串中包含形如“@数字&”格式的子串 String st="看,墙面上的雕塑是什么?@322&大家一定猜到了,这是一个神经元。汇区的研院校及企业资源,促进产学研医多个环节上的相互合作与交融"; Pattern pattern = Pattern.compile("^(.*)@-?[1-9]\\d*&(.*)$"); //去掉空格符合换行符 Matcher matcher = pattern.matcher(st); boolean result = matcher.find();
待续…
总结
到此这篇关于Java使用正则表达式检索、替换String中特定字符和正则表达式的一切的文章就介绍到这了,更多相关Java正则表达式检索、替换String特定字符内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!