利用正则表达式取出“积分:9.0/余额:103.25”里面的数字

简介: 利用正则表达式取出“积分:9.0/余额:103.25”里面的数字

    记录问题,当往数据库存的数据是“积分:9.0/余额:103.25”。但是要给前端把里面的数字单独取出来,让前回显,这时候要不就是往表里新增一个字段作为专门存储积分和余额,要不就是通过代码利用正则表达式取出来,当然,我选择后者。

代码:

package Lx;
import java.util.regex.Pattern;
public class Matcher {
  public static void main(String[] args) {
      double jiFenString = 0;
      double yuEString = 0;
      String rewardContent = "积分:9.0/余额:103.25";
          String pattern = "(积分|余额):(\\d{1,3}(\\.\\d+)?)";
          Pattern r = Pattern.compile(pattern);
          java.util.regex.Matcher m = r.matcher(rewardContent);
          while (m.find()) {
              String type = m.group(1);
              double value = Double.parseDouble(m.group(2));
              if ("积分".equals(type)) {
                jiFenString = value;
              } else if ("余额".equals(type)) {
                yuEString  =value;
              }
          }
          System.out.println("jiFenString = "+jiFenString+"\n"+"yuEString = "+yuEString);
  }
}

打印:

正则表达式解释:

这个正则表达式 `(积分|安全):(\\d{1,3}(\\.\\d+)?)` 具体的含义如下:

 `(积分|余额)` 表示匹配两个字符串中的任意一个,即要么匹配 "积分",要么匹配 "余额"。这里使用了括号将两个选项进行了分组。

`:` 表示匹配一个冒号字符,用于分隔属性名和属性值。

`(\\d{1,3}(\\.\\d+)?)` 表示匹配一个数字,其整数部分可以由 1 到 3 位数字组成,可选的小数部分由一个小数点和至少一位数字组成。这里同样使用了括号进行了分组。

具体解析:

  • `(积分|余额)` 要求要么匹配 "积分",要么匹配 "余额"。
  • `:` 要求匹配一个冒号字符。
  • `(\\d{1,3}(\\.\\d+)?)` 要求匹配一个数字,整数部分可以由 1 到 3 位数字组成,可选的小数部分由一个小数点和至少一位数字组成。

这个正则表达式适用于匹配形如 "积分:123.45" 或 "安全:99" 这样的字符串,其中 "积分" 或 "余额" 是属性名,而数字部分是对应的属性值。在代码中,使用这个正则表达式可以方便地从字符串中提取出属性名和属性值进行后续处理。

流程解析:
  1. 定义正则表达式 "(积分|余额):(\\d{1,3}(\\.\\d+)?)";
  2. 使用 Pattern.compile(pattern) 将正则表达式编译成一个 Pattern 对象。
  3. 使用 pattern.matcher(rewardContent) 获取到一个 Matcher 对象。
  4. while (m.find()) 循环中,使用 Matcher 对象的 find() 方法来匹配满足正则表达式规则的字符串部分。
  5. 若找到匹配,则使用 m.group(1)m.group(2) 获取到匹配到的第一个和第二个子字符串(分别代表符合正则表达式的第一个和第二个括号内的内容)。
  6. 根据 type 的值来判断是哪个属性的值,并将 value 设置为相应的属性值。
相关文章
|
5月前
|
算法 索引 Python
二刷力扣--字符串
二刷力扣--字符串
|
6月前
微信和支付宝支付的金额不能超过两位小数,可以把后台超过两位小数的支付字符串修正为两位小数
微信和支付宝支付的金额不能超过两位小数,可以把后台超过两位小数的支付字符串修正为两位小数
53 0
数字 金额 相关 转换
数字 金额 相关 转换
59 0
关于Java转换金额数字为大写金额
关于Java转换金额数字为大写金额 目前只写到万亿
|
测试技术
【解决方案 二十三】带单位的数值转大写人民币金额
【解决方案 二十三】带单位的数值转大写人民币金额
108 0
|
JavaScript
js 将数值金额转换成大写金额
js 将数值金额转换成大写金额
69 0
|
算法
红包随机算法,给定一定的金额,一定的人数,保证每个人都能随机获得一定的金额。...
红包随机算法,给定一定的金额,一定的人数,保证每个人都能随机获得一定的金额。...
228 0
Day25——组合总和III、电话号码的字母组合
Day25——组合总和III、电话号码的字母组合
87 0
用户输入学号,如果是以aabcddef开头,并且后边是4位数字,前两位大于06小于等于当前年份。判断用户输入是否合法
用户输入学号,如果是以aabcddef开头,并且后边是4位数字,前两位大于06小于等于当前年份。判断用户输入是否合法
110 0
|
算法
怒刷力扣(出现一次的数字)
这个题不熟悉异或的同学可能找不到这个解题的方法。做了这么久的算法,发现很多算法题都能用到数学的方法进行计算,这样说可能不合适,算法本身就是数学的一种解题方法。还是感觉自身掌握的太少了。
155 4
怒刷力扣(出现一次的数字)