最近在做一些支付报文处理工作,需要从各种各样的报文中提取需要的信息比如(金额,订单号。。。),每个渠道报文各式各样,想要写一个通用的提取逻辑,于是就回顾java正则表达式的用法。当然我们可以自己写一些算法,去提取这些字段,但对于简单的解析来说,亲自手写算法有点杀鸡用牛刀的感觉,而且正则表达式完全可以满足大部分的字符提取需求。好了闲话不多说,先列出正则表达式的常用语法:

  • \:表示下一个字符为特殊含义的字符例如:\d匹配数字
  • ^:表示匹配字符开始的位置例如:^#.*:匹配以#开头的所有字符
  • $:表示匹配字符结束位置例如:.*元$:匹配以元为结尾的字符
  • .:表示匹配所有字符
  • *:表示出现次数为0,或大于0次
  • +:表示出现次数为1或大于1次
  • ?:表示匹配0次或1次
  • {n}:标示与字符刚好匹配n次
  • {n,m}:标示至少匹配n次,最多匹配m次
  • [xyz]:字符集,匹配字符集中任意字符,例如:[abc] 匹配plan中的a
  • [^xyz]:反向字符集,相当与非运算,表示不在字符集中的字符
  • (pattern):子表达式,在java中我们自左向右取group: matcher.group(0);

下面列出一些常用的特殊字符及其含义:

  • \d:匹配数字,等效于[0-9]
  • \D:匹配非数字,等效于[^0-9]
  • \n:匹配换行符
  • \r:匹配回车符
  • \s:匹配空格或者换行符或者换页符,等效于[\f\n\r\t\v]
  • \S:匹配任何非空字符
  • \w:匹配任何字类字符,等效于[a-zA-Z0-9]
  • \W:匹配任何非字类字符

为了加深理解与运用,下面列出几个应用场景:

取出下面字符串中的金额:

#支出合计:33笔, 共10.00元
String temp = "#支出合计:33笔, 共10.00元";
Pattern p = Pattern.compile("(\\d+\\.\\d+)");
Matcher matcher = p.matcher(temp);
if(matcher.find()){
System.out.println(matcher.group(0));
System.out.println(matcher.group(1));
}

输出:10.00

发现成功的将报文中的金额识别出来,因此我们只需要将不同结构的报文中含有金额部分输入,就可以方便的输出金额了,简单的万金油....

java 中的字符串处理--正则表达式的更多相关文章

  1. Java中的字符串操作(比较String,StringBuiler和StringBuffer)

    一.前言 刚开始学习Java时,作为只会C语言的小白,就为其中的字符串操作而感到震撼.相比之下,C语言在字节数组中保存一个结尾的\0去表示字符串,想实现字符串拼接,还需要调用strcpy库函数或者自己 ...

  2. (转载)java中判断字符串是否为数字的方法的几种方法

    java中判断字符串是否为数字的方法: 1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < ...

  3. [原创]Java中的字符串比较,按照使用习惯进行比较

    java中的字符串比较一般可以采用compareTo函数,如果a.compareTo(b)返回的是小于0的数,那么说明a的unicode编码值小于b的unicode编码值. 但是很多情况下,我们开发一 ...

  4. 理解Java中的字符串类型

    1.Java内置对字符串的支持: 所谓的内置支持,即不用像C语言通过char指针实现字符串类型,并且Java的字符串编码是符合Unicode编码标准,这也意味着不用像C++那样通过使用string和w ...

  5. Java中的字符串驻留

    转自:http://www.cdtarena.com/javapx/201307/9088.html 最近在工作的时候,一句再正常不过的代码String a = “hello” + “world”;被 ...

  6. Java中的字符串拼接

    Java中的字符串拼接 1.设计源码 /** * @Title:IndexOf.java * @Package:com.you.freemarker.model * @Description: * @ ...

  7. java中,字符串类型的时间数据怎样转换成date类型。

    将字符串类型的时间转换成date类型可以使用SimpleDateFormat来转换,具体方法如下:1.定义一个字符串类型的时间:2.创建一个SimpleDateFormat对象并设置格式:3.最后使用 ...

  8. Android学习笔记----Java中的字符串比较

    用习惯了C#.C++,在做字符串比较时想当然地使用如下语句: string str1 = "abcd", str2 = "abcd"; if(str1==str ...

  9. 转载:Java中的字符串常量池详细介绍

    引用自:http://blog.csdn.net/langhong8/article/details/50938041 这篇文章主要介绍了Java中的字符串常量池详细介绍,JVM为了减少字符串对象的重 ...

随机推荐

  1. js面试-手写代码实现new操作符的功能

    我们要搞清楚new操作符到底做了一些什么事情? 1.创建一个新的对象 2.将构造函数的作用域赋给新对象(因此this指向了这个新对象) 3.执行构造函数中的代码(为这个新对象添加属性) 4.返回新对象 ...

  2. java 构造器(构造方法)使用详细说明

    知识点 什么是构造器 构造器通常也叫构造方法.构造函数,构造器在每个项目中几乎无处不在.当你new一个对象时,就会调用构造器.构造器格式如下: [修饰符,比如public] 类名 (参数列表,可以没有 ...

  3. [2020.03]Unity ML-Agents v0.15.0 环境部署与试运行

    一.ML-Agents简介 近期在学习Unity中的机器学习插件ML-Agents,做一些记录,用以简单记录或交流学习. 先简单说一下机器学习使用的环境场景:高视觉复杂度(Visual Complex ...

  4. 2018-05-04 圣杯布局 and 双飞翼布局,display:flex

    看到一个神奇的布局,啥都不说了 直接贴代码 要让main在中间,left在左边,可以通过Flex容器下的项目的属性“order”属性来设置:对于order属性:定义项目的排列顺序,越小越靠前,默认为0 ...

  5. getBoundingClientRect的实用场景

    在用vue开发项目时候,遇到一个问题,首页有代办列表,是固定定位,滚动时候需要监听距离页面顶部的距离,如果很接近顶部则将代办列表展示,首页隐藏,如果再网上翻动则又回到首页. 因为是是fixed定位,所 ...

  6. unzip详解,Linux系统如何解压缩zip文件?

    通常在使用linux时会自带了unzip,但是在最小化安装之后,可能系统里就无法使用此命令了. yum list unzip 查看是否安装 如果没安装过就继续 yum install unzip 安装 ...

  7. python学习-练习题9*9乘法表巩固

    9*9乘法表 分析: 1X1为一行 1X2 2X2 为一行 for i in range(1,10): for j in range(1,i+1): print(str(i) + 'X' + str( ...

  8. vue新窗口跳转路由

    this.$router.push()方法我在这就不多说了: 看代码:   let newUrl = this.$router.resolve({         path: '/test/test' ...

  9. linux工具集

    1.ag:比grep.ack更快的递归搜索文件内容 安装: 1:首先在linux创建个sh文件->ag.sh 2:在ag.sh里面输入如下内容并保存 set -x TEMP_DIR=$(mkte ...

  10. (转)协议森林08 不放弃 (TCP协议与流通信)

    协议森林08 不放弃 (TCP协议与流通信) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! TCP(Transportation ...