推荐在复杂字符串操作中使用正则表达式-阿里云开发者社区

开发者社区> 范大脚脚> 正文

推荐在复杂字符串操作中使用正则表达式

简介:
+关注继续查看

一、分析 

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

二、场景 

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

复制代码
 1 import java.util.Scanner;
 2 
 3 public class Client {
 4     public static void main(String[] args) {
 5         //接收键盘输入
 6         Scanner input = new Scanner(System.in);
 7         while(input.hasNext()){
 8             String str = input.nextLine();
 9             //使用split方法分隔后统计
10             int wordsCount = str.split(" ").length;
11             System.out.println(str + " 单词数:" + wordsCount);
12         }
13     }
14 }
复制代码

使用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"单词的前后没有空格,最后一个输入则没有把连写符号“'”考虑进去,这样统计出来的单词数量肯定错误一堆,那怎样才合理呢? 

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

复制代码
 1 import java.util.Scanner;
 2 import java.util.regex.Matcher;
 3 import java.util.regex.Pattern;
 4 
 5 public class Client {
 6     public static void main(String[] args) {
 7         //接收键盘输入
 8         Scanner input = new Scanner(System.in);
 9         while (input.hasNext()) {
10             String str = input.nextLine();
11             //正则表达式对象
12             Pattern pattern = Pattern.compile("\\b\\w+\\b");//生成匹配器
14             Matcher matcher = pattern.matcher(str);
15             //记录单词数量
16             int wordsCount = 0;
17             //遍历查找匹配,统计单词数量
18             while (matcher.find()) {
19                 System.out.println(matcher.group());
20                 wordsCount++;
21             }
22             System.out.println(str + " 单词数:" + wordsCount);
23         }
24     }
25 }
复制代码

输出结果:

复制代码
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循环统计匹配的数量。 

需要说明的是,在Java的正则表达式中"\b"表示的是一个单词的边界,它是一个位置界定符,一边为字符或数字,另外一边则非字符或数字.

例如"A"这样的一个输入就有两个边界,即单词"A"的左右位置,这也就说明了为什么要加上"\w"(它表示的是字符或数字)

三、建议 

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

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

 

 //==================================

复制代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Client {
    public static void main(String[] args) {
        String c = "But I'm not dead yet!";
        Pattern pattern = Pattern.compile("[ [']]");
        Matcher matcher = pattern.matcher(c);
        for(String str:pattern.split(c)){
            System.out.print(str+" ");
        }
    }
}
复制代码

输出:

But I m not dead yet! 

 

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5660260.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
[细说Java](3)创建字符串是使用" "还是构造函数?
在Java中,可以使用两种方式创建字符串: String x = "abc"; String y = new String("abc"); 对于这两种方式(双引号,构造函数)它们到底有什么区别呢? 1.
693 0
2014秋C++第13周项目5参考-字符串操作
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。  【项目5-字符串操作】(1)阅读下面的程序,完成类似的字符统计功能 #include<iostream> #include<cstdio> using namespac
909 0
C#使用OleDB操作ACCESS插入数据时提示:标准表达式中数据类型不匹配。
C#使用OleDB操作ACCESS插入数据时提示:标准表达式中数据类型不匹配。 OleDbParameter param = new OleDbParameter("" + dc.
651 0
VC中的正则表达式使用
对于很多应用,例如文件查询和名称匹配,在html文件中查找匹配的超链接等等 正则表达式自然是最好的解决方法. 不过VC里面竟然不如VBS对于Regular Expression那样有支持, 除非升级到VC.NET(使用拖管C++就可以使用).
946 0
使用GTMBase64编码解码字符串
使用GTMBase64编码解码字符串 说明:BASE64不是用来加密的。你看看经过BASE64编码后的字符串,全部都是由标准键盘上面的常规字符组成,这样编码后的字符串在网关之间传递不会产生UNICODE字符串不能识别或者丢失的现象。
844 0
使用正则表达式抓取博客园列表数据
鉴于我在要完成的asp.net MVC 3 仿照博客园企业系统要用到测试数据,我自己输入太累,所以我就抓取了博客园的部分列表数据,还请dudu不要见怪。 在抓取博客园数据的时候采用了正则表达式,所以有不熟悉正则表达式的朋友可以参考相关资料,其实很容易掌握,就是在具体的实例中会花些时间。
899 0
《Java编码指南:编写安全可靠程序的75条建议(英文版)》—— 第6章 使用字符串来交流 6.1 在字符串中存储文本
Java程序将字符串作为与用户交流的主要方式。字符串是一组文本,可以包含字母、数字、标点符号及其他字符。本章将介绍如何在Java程序中使用字符串。
1136 0
+关注
3656
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载