博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式
阅读量:5818 次
发布时间:2019-06-18

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

一、分析 

字符串的操作,诸如追加、合并、替换、倒序、分隔等,都是在编码过程中经常用到的,而且Java也提供了append、replace、reverse、split等方法来完成这些操作,它们使用起来确实方便,但是更多的时候,需要使用正则表达式来完成复杂的处理。 

二、场景 

统计一篇文章中的单词的数量,代码如下 

 

public static void main(String[] args){     //接受键盘输入     Scanner input = new Scanner(System.in);     while(input.hasNext()){         String str = input.nextLine();         //使用split方法分隔后统计         int wordsCount =  str.split(" ").length;         System.out.println(str + "单词数:" + wordsCount);     } }

 

使用split方法根据空格来分隔单词,然后计算分隔后的数组长度,这种方法可靠吗?我们看输出 

Today is Monday 

Today is Monday 单参数:3 

Today is  Monday 

Today is  Monday 单词数:4 

Today is Monday?No! 

Today is Monday?No! 单词数:3 

I'm Ok. 

I'm Ok. 单词数:2 

注意到,除了第一个正确外,其它的都是错误的。第二条输入单词"Monday"前有两个空格,第三条输入中"NO"单词的前后没有空格,最后一个输入则没有把连写符号“'”考虑进去,这样统计出来的单词数量肯定错误一堆,那怎样才合理呢? 

可以考虑使用正则表达式,代码如下 

 

public static void main(String[] args){     //接受键盘的输入     Scanner input = new Scanner(System.in);     while(input.hasNext()){         String str = input.nextLine();         //正则表达式对象         Pattern pattern = Pattern.compile("\\b\\w+\\b");         //生成匹配器         Matcher matcher = pattern.matcher(str);         //记录单场数量         int wordsCount = 0;         //遍历查找匹配,统计单场数量         while(matcher.find()){             wordsCount++;         }         System.out.println(str + "单词数:" + wordsCount);     } }

准不准确,我们看输入产生的结果:Today is Monday 

Today is Monday 单参数:3 

Today is  Monday 

Today is  Monday 单词数:3 

Today is Monday?No! 

Today is Monday?No! 单词数:4 

I'm Ok. 

I'm Ok. 单词数:3 

每项输出都是正确的,而且程序也不复杂,先生成一个正则表达式对象,然后使用匹配器进行匹配,之后通过一个while循环统计匹配的数量。 

三、建议 

正则表达式在字符串的查找、替换、剪切、复制、删除等方面都有着非凡的作用,特别是面对大量的文本字符串需要处理(如果需要锤炼大量的LOG日志)时,使用正则表达式可以大幅提高开发效率和系统性能。 

但是正则表达式是一个恶魔,它会使程序难以读懂 

转载地址:http://zwwdx.baihongyu.com/

你可能感兴趣的文章
一个简洁的PHP可逆加密函数(分享)
查看>>
POJ-3469 Dual Core CPU 最小割最大流
查看>>
asp.net学习之扩展GridView
查看>>
一次意外的X锁不阻塞问题
查看>>
setsockopt()使用方法(參数具体说明)
查看>>
Spring5:@Autowired注解、@Resource注解和@Service注解
查看>>
Geeks 一般二叉树的LCA
查看>>
wpf的MVVM框架
查看>>
Parquet文件结构笔记
查看>>
【HDU 5698】瞬间移动(组合数,逆元)
查看>>
能源项目xml文件 -- springMVC-servlet.xml
查看>>
openwrt安装编译
查看>>
POJ 2386 Lake Counting 搜索题解
查看>>
tomcat中如何配置虚拟路径
查看>>
个人的中小型项目前端架构浅谈(转)
查看>>
Vue.js插件开发
查看>>
uva 1456(dp)
查看>>
[LeetCode]94.Binary Tree Inorder Traversal
查看>>
关于Java -cp引用jar是否支持通配符
查看>>
浅谈Web缓存-缓存的实现过程详解
查看>>