zoukankan      html  css  js  c++  java
  • 正则表达式提取String子串

    最近遇到了一个字符串处理的功能,忽然发现了正则表达式的强大,深深的被她的迷人魅力所吸引,以前只是听说,今天亲眼所见,亲身经历,真的彻底折服。
    言归正传:java中String类里面封装了很多字符串处理的方法,替换、查找、包含等,但是我今天遇到了一个功能竟然没有封装,就是查找出字符串内所有匹配正则表达式的字符串数组,(源字符串“2012-08-12 水电费 2012-12 abcde 2012-08-23”,正则表达式:“\d{4}[ /-]{1}\d{2}([ /-]{1}\d{2})?”,我所需要的就是{“2012-08-12”,“2012-12”,“2012-08-23”}),这该怎么实现呢?
    为了实现我的目的,我也煞费周折啊。认真研究了Pattern和Matcher两个类,幸好是,要不然我也就体会不到这种柳暗花明的感觉了,也感受不到正则的魅力了。其实String自身携带的方法已够应付绝大多数的应用了,Pattern中的方法基本在String中都有体现,即单独使用Pattern的时候相对就少了一点,Matcher也就使用了find() 和group()就可以实现我上面提出的功能了。

    具体实现:

    		String str="2012-08-12 2012-12 abcde 2012-08-23 ";
    		String regex = "\d{4}[ /-]{1}\d{2}([ /-]{1}\d{2})?"; //正则表达式
    		Pattern pattern = Pattern.compile(regex); 
    		Matcher m = pattern.matcher(str);
    		List<String> matchRegexList = new ArrayList<String>();
    		while(m.find()){
    			matchRegexList.add(m.group());
    		}

    下面是整个字符串通过正则表达式进行拆分后(包含拆分符,String.split()返回的不包含正则表达式的值,要不然我也不用费那么大劲了)的数组:

    		String str="2012-08-12 2012-12 abcde 2012-08-23 ";
    		String regex = "\d{4}[ /-]{1}\d{2}([ /-]{1}\d{2})?"; //正则表达式
    		Pattern pattern = Pattern.compile(regex); 
    		Matcher m = pattern.matcher(str);
    		List<String> matchRegexList = new ArrayList<String>();
    		while(m.find()){
    			matchRegexList.add(m.group());
    		}
    		System.out.println(m.groupCount());
    		String[] result = pattern.split(str); //使用正则表达式,分割字符串
    		List<String> allSplitList = new ArrayList<String>();
    		int len = matchRegexList.size() > result.length ? matchRegexList.size():result.length;
    		for(int i=0; i<len; i++){
    			if(i<result.length){
    				allSplitList.add(result[i]);
    			}
    			if(i<matchRegexList.size()){
    				allSplitList.add(matchRegexList.get(i));
    			}
    		}
    		for (int i = 0; i < allSplitList.size(); i++) { //获取源字符串中匹配正则表达的字符串
    			System.out.println("-"+allSplitList.get(i)+"-");
    		}


  • 相关阅读:
    Mysql有什么办法批量去掉某个字段字符中的空格
    Mysql order by 排序 varchar 类型数据
    JS将人民币小写金额转换为大写
    禁止表单输入中文(禁止粘贴)
    abp vnext 开发快速入门 3 实现权限控制
    abp vnext 开发快速入门 2 实现基本增删改查
    abp vnext 开发快速入门 1 认识框架
    从零开始一起学Blazor WebAssembly 开发(4)
    发布一个自己做的图片转Base64的软件,Markdown写文章时能用到
    一起学Blazor WebAssembly 开发(3)
  • 原文地址:https://www.cnblogs.com/vvch/p/4027597.html
Copyright © 2011-2022 走看看