利用正则表达式取出“积分: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 设置为相应的属性值。
相关文章
|
4月前
|
算法 索引 Python
二刷力扣--字符串
二刷力扣--字符串
|
5月前
微信和支付宝支付的金额不能超过两位小数,可以把后台超过两位小数的支付字符串修正为两位小数
微信和支付宝支付的金额不能超过两位小数,可以把后台超过两位小数的支付字符串修正为两位小数
41 0
|
11月前
数字 金额 相关 转换
数字 金额 相关 转换
50 0
算法练习Day43|● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ
算法练习Day43|● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ
打印16、32、34与自定义进制流水
流水码在实际打标签中常见,如流水号文字、流水一维码、流水二维码,而常用的流水方式是10进制,就是逢十进位;也有一些特殊场景的流水要求, 比如:手机MEID串码的16进制流水;车牌号管理中去除字母O、I的34进制流水...
149 0
打印流水号文字(递增、递减)
标签文件的批量打印,常以流水号(序列号)文字来区分标签,以实现标签的唯一性。最简单的“递增”流水号样式如:0001、0002、0003、0004...
86 0
|
算法
红包随机算法,给定一定的金额,一定的人数,保证每个人都能随机获得一定的金额。...
红包随机算法,给定一定的金额,一定的人数,保证每个人都能随机获得一定的金额。...
210 0
|
JavaScript
js 将数值金额转换成大写金额
js 将数值金额转换成大写金额
63 0
Day25——组合总和III、电话号码的字母组合
Day25——组合总和III、电话号码的字母组合
81 0
|
算法
怒刷力扣(出现一次的数字)
这个题不熟悉异或的同学可能找不到这个解题的方法。做了这么久的算法,发现很多算法题都能用到数学的方法进行计算,这样说可能不合适,算法本身就是数学的一种解题方法。还是感觉自身掌握的太少了。
151 4
怒刷力扣(出现一次的数字)