利用正则表达式取出“积分: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 设置为相应的属性值。
相关文章
|
Linux 网络架构
Linux 中查看本机的子网掩码和网关
Linux 中查看本机的子网掩码和网关
|
开发框架 算法 前端开发
一位.Net开发工程师的客户端技术栈的学习路线
从2018年硕士毕业后,我一直从事着.Net开发工作,趁着CSDN这次活动,给大家分享一下.Net客户端领域的技术栈的学习路线,这个学习路线,涵盖的是比较基础的内容,适合刚入门.Net的萌新学习和刚进入职场的毕业生查漏补缺,然后这个博文比较受大家的欢迎的话,后续可能会考虑出一个更详细的版本。致敬我彻夜学习的.Net。
一位.Net开发工程师的客户端技术栈的学习路线
|
Java 测试技术 Maven
maven 打jar包:mvn clean package
maven 打jar包:mvn clean package
337 7
|
存储 关系型数据库 数据库
PostgreSQL的逻辑备份与物理备份
制定备份和恢复计划是每一个DBA最重要的工作之一,它决定了数据的有效性和完整性。也可以搭建跨越不同数据中心的流复制集群,能有效的帮助你避免单点故障。但是只有一份有效的备份能够帮助从delete或者drop的误操中恢复数据。
3913 0
|
6月前
|
存储 人工智能 测试技术
HarmonyOS Next~HarmonyOS应用测试全流程解析:从一级类目上架到二级类目专项测试
本文深入解析HarmonyOS应用测试全流程,涵盖从一级类目通用测试到二级类目专项测试的技术方案。针对兼容性、性能、安全测试及分布式能力验证等关键环节,提供详细实践指导与代码示例。同时,结合典型案例分析常见问题及优化策略,帮助开发者满足华为严苛的质量标准,顺利上架应用。文章强调测试在开发中的核心地位,助力打造高品质HarmonyOS应用。
346 2
|
监控 安全 C#
使用C#如何监控选定文件夹中文件的变动情况?
使用C#如何监控选定文件夹中文件的变动情况?
319 19
|
存储 SQL 关系型数据库
StarRocks 【新一代MPP数据库】(2)
StarRocks 【新一代MPP数据库】
|
JSON 安全 API
⚡什么是 OpenAPI,优势、劣势及示例
OpenAPI 是一个用于描述RESTful API的标准,它提供了一个接口,使得人和机器无需源代码或文档就能理解服务。它定义了API的结构,与语言无关,适用于REST API。OpenAPI始于Swagger项目,后来成为OpenAPI倡议的一部分,由Linux基金会管理,得到了众多公司的支持。OpenAPI流行的原因包括其语言无关性、可读性、社区支持和工具生态系统。它使用JSON格式,支持各种数据类型,并具有严格定义的结构。虽然有其他如RAML和API Blueprint的竞争格式,但OpenAPI的广泛采用使其成为行业标准。
|
机器学习/深度学习 人工智能 数据可视化
Jupyter Notebook的10个常用扩展介绍
Jupyter Notebook(前身为IPython Notebook)是一种开源的交互式计算和数据可视化的工具,广泛用于数据科学、机器学习、科学研究和教育等领域。它提供了一个基于Web的界面,允许用户创建和共享文档,这些文档包含实时代码、方程、可视化和文本。
427 6
|
机器学习/深度学习 数据可视化 小程序
一步之遥:从python小白到精通大神,如何快速学习python?
一步之遥:从python小白到精通大神,如何快速学习python?
269 0