Java 通配符 在短信发送之中 通配符参数动态获取解决方案
目录
1、通配符应用场景
2、实现方案分析
2.1、可能针对不同模板中核定参数硬编码到程序之中写死
2.2、通配置模板之中动态获得对应的参数
3、通过正则表达式验证与替换参数${}参考示例
4、参考文章
1、通配符应用场景
我们在使用通配符场景,主要是应用于短信发送水费通知信息。其中里面可能有户名、当前水费金额,以及当期【年月 如2024年06月】等等相关需要替换的动态信息需要使用到相关通配符作为参数进行相关的替换。同时这次替换参数还需要配置到相关的短信发送提供商对应的模板之中。
2、实现方案分析
2.1、可能针对不同模板中核定参数硬编码到程序之中写死
我是在最近维护以前其他旧系统代码之中,发现了相关类似的代码;这样相当于每个模板一旦设定后续再追加相关参数就需要调整和修改对应的代码之中各处代码;无法适应新增相关动态配置通配符参数。我是增加一个通配符参数,结果仅仅只修改某一处代码,结果发现无法实现替换。于是需要搜索相关对应参数进行各处都得修改之后才能实现增加通配符参数方可生效。
2.2、通配置模板之中动态获得对应的参数
为何需要通过通配符之中动态获取参数,因为这样可以通过如下两个参数来控制。模板类型与模板id,然后通过模板字符串动态获取其中参数;这样就可以获得正确获得变化后的参数名称;同时保存一份到模板类型数据表之中。这样就可以通过解析相关参数就可以动态去解析有变化的参数,这样通过参数替换就可以快速新增对应参数获得不同水司所需短信要求。
3、通过正则表达式验证与替换参数${}参考示例
经常需要使用正则表达式来查找和处理文本。其中一个常见的需求是查找字符串中的${}格式的变量,并将其替换为对应的值。我们将介绍如何使用Java正则表达式来查找${}并进行替换操作,同时提供一些代码示例。
【***水务】尊敬的${username},户号:${household_no},地址:${address},${meterReadMonth}用水量${used_num}立方米,费用共${fee}元。您可通过支付宝、微信等渠道缴费。请您认真核对缴费信息,如缴错我公司概不负责。如已缴费,请忽略此短信。供水热线07**-5834***
正则表达式查找${}
在Java中,可以使用Pattern和Matcher类来进行正则表达式的匹配操作。
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class TemplateParamsExtractor {public static void main(String[] args) {// 定义要匹配的字符串String input = "【***水务】尊敬的${username},户号:${household_no},地址:${address},${meterReadMonth}用水量${used_num}立方米,费用共${fee}元。您可通过支付宝、微信等渠道缴费。请您认真核对缴费信息,如缴错我公司概不负责。如已缴费,请忽略此短信。供水热线07**-5834***";// 定义匹配的正则表达式String patternString = "\\$\\{([^}]*)\\}";//String patternString = "\\$?\\{([^\\}]+)\\}";// 创建Pattern对象Pattern pattern = Pattern.compile(patternString);// 创建Matcher对象Matcher matcher = pattern.matcher(input);// 查找匹配的结果while (matcher.find()) {// 获取匹配到的变量名String variableName = matcher.group(1);System.out.println("variableName "+variableName);// 将变量名替换为对应的值String value = getVariableValue(variableName);// 替换匹配到的变量input = input.replace(matcher.group(), value);}// 输出替换后的结果System.out.println(input);}// 根据变量名获取对应的值public static String getVariableValue(String variableName) {/**【***水务】尊敬的罗琼,户号:19587,地址:朝阳街-纺织厂311-312,2024年-06月用水量11立方米,费用共33.00元。您可通过支付宝、微信等渠道缴费。请您认真核对缴费信息,如缴错我公司概不负责。如已缴费,请忽略此短信。供水热线07**-5834****/// 在实际应用中,可以根据变量名从配置文件、数据库或其他数据源中获取对应的值String matchValue="";switch (variableName){case "username":matchValue="罗琼";break;case "household_no":matchValue="19587";break;case "address":matchValue="朝阳街-纺织厂311-312";break;case "meterReadMonth":matchValue="2024年-06月";break;case "used_num":matchValue="11";break;case "fee":matchValue="33.00";break;default:break;}return matchValue;}}
在上面的示例中,我们定义了一个带有${}格式的输入字符串,并使用正则表达式\\$\\{([^}]*)\\}来匹配其中的变量名。其中:
\\$表示匹配美元符号$;
\\{和\\}表示匹配左右大括号{};
([^}]*)表示匹配大括号中的任意字符,除了右括号}。
通过在正则表达式中使用圆括号,我们可以将其中的变量名提取出来。
接下来,我们创建Pattern对象并使用输入字符串和正则表达式初始化它。然后,我们创建Matcher对象并使用find()方法查找匹配的结果。在每次循环中,我们使用group(1)方法获取匹配到的变量名,并使用自定义的getVariableValue()方法获取对应的值。最后,我们使用replace()方法将匹配到的变量替换为对应的值。最后,我们输出替换后的结果。
variableName username
variableName household_no
variableName address
variableName meterReadMonth
variableName used_num
variableName fee
【***水务】尊敬的罗琼,户号:19587,地址:朝阳街-纺织厂311-312,2024年-06月用水量11立方米,费用共33.00元。您可通过支付宝、微信等渠道缴费。请您认真核对缴费信息,如缴错我公司概不负责。如已缴费,请忽略此短信。供水热线07**-5834***
4、参考文章
java正则查找${}
相关文章:
Java 通配符 在短信发送之中 通配符参数动态获取解决方案
目录 1、通配符应用场景 2、实现方案分析 2.1、可能针对不同模板中核定参数硬编码到程序之中写死 2.2、通配置模板之中动态获得对应的参数 3、通过正则表达式验证与替换参数${}参考示例 4、参考文章 1、通配符应用场景 我们在使用通配符场景,主要是应用于短信…...
Mybatis-Plus中LambdaQueryWrapper
基本用法 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; // 假设有一个 User 实体类 LambdaQueryWrapper<User> queryWrapper new LambdaQueryWrapper<>(); // 添加查询条件 queryWrapper.eq(User::getName, "John&quo…...
C++ 入门05:类和对象
往期回顾: C 入门02:控制结构和循环-CSDN博客C 入门03:函数与作用域-CSDN博客C 入门04:数组与字符串-CSDN博客 一、前言 在前面文章的学习中,我们了解了 C 的基本结构、变量、输入输出、控制结构、循环、函数、作用域…...

4G LTE教程
整体架构 物理层(第 1 层) 物理层通过空中接口传输来自 MAC 传输信道的所有信息。负责 RRC 层的链路自适应 (AMC)、功率控制、小区搜索(用于初始同步和切换目的)和其他测量(LTE 系统内部和系统之间)。 介…...

C++:哈希表
哈希表概念 哈希表可以简单理解为:把数据转化为数组的下标,然后用数组的下标对应的值来表示这个数据。如果我们想要搜索这个数据,直接计算出这个数据的下标,然后就可以直接访问数组对应的位置,所以可以用O(1)的复杂度…...

自己动手写一个滑动验证码组件(后端为Spring Boot项目)
近期参加的项目,主管丢给我一个任务,说要支持滑动验证码。我身为50岁的软件攻城狮,当时正背着双手,好像一个受训的保安似的,中规中矩地参加每日站会,心想滑动验证码在今时今日已经是标配了,司空…...
keepalive脑裂
keepalive脑裂 调度器的高可用 vip地址主备之间的切换,主在工作时,p地址只在主上,主停止工作,ip飘移到备服务器。 在主备的优先级不变的情况下,主恢复工作,vip会飘回到主服务器。 1、配优先级 2、配置…...

STM32Cubemx配置生成 Keil AC6支持代码
文章目录 一、前言二、AC 6配置2.1 ARM ComPiler 选择AC62.2 AC6 UTF-8的编译命令会报错 三、STM32Cubemx 配置3.1 找到stm32cubemx的模板位置3.2 替换文件内核文件3.3 修改 cmsis_os.c文件3.4 修改本地 四、编译对比 一、前言 使用keil ARM compiler V5的时候,编译…...
Perl基础入门指南:从零开始掌握Perl编程
Perl是一种功能强大且灵活的编程语言,广泛应用于系统管理、Web开发、网络编程和文本处理等领域。如果你是编程新手或者想学习一种新的编程语言,Perl是一个不错的选择。本文将带你了解Perl的基础知识,并通过简单的示例代码帮助你快速入门。 什…...
Mybatis SQL注解使用场景
MyBatis 提供了几种常用的注解,主要用于简化 XML 映射文件的编写,使得 SQL 查询和操作可以直接在 Java 接口中定义。下面列出了主要的注解以及它们在被调用时的写法示例: 1. Select Select 注解用于执行查询操作,并将查询结果映…...

Dataset for Stable Diffusion
1.Dataset for Stable Diffusion 笔记来源: 1.Flickr8k数据集处理 2.处理Flickr8k数据集 3.Github:pytorch-stable-diffusion 4.Flickr 8k Dataset 5.dataset_flickr8k.json 1.1 Dataset 采用Flicker8k数据集,该数据集有两个文件ÿ…...

近期matlab学习笔记,学习是一个记录,反复的过程
近期matlab学习笔记,学习是一个记录,反复的过程 matlab的mlx文件在运行的时候,不需要在文件夹路径下,也能运行,但是需要调用子函数时,就需要在文件所在路径下运行 那就先运行子函数,把路径换过来…...
Elasticsearch7.5.2 常用rest api与elasticsearch库
目录 一、rest api 1. 新建索引 2. 删除索引 3. 插入单条数据 4. 更新单条数据 5. 删除单条数据 6. 查询数据 二、python elasticsearch库 1. 新建索引 一、rest api 1. 新建索引 请求方式:PUT 请求URL:http://ip/(your_index_nam…...

Autosar Dcm配置-0x28服务ComControl-基于ETAS软件
文章目录 前言DcmDcmDsdDcmDspBswMBswMModeRequestPortBswMModeConditionBswMLogicalExpressionBswMActionBswMActionListBswMRule总结前言 0x28服务主要用来控制非诊断报文的通讯,一般在刷写预编程过程中,用来禁止APP的通信报文,可以减少总线负载率,提高刷写成功率。本文…...
平安养老险厦门分公司:提升金融服务,发挥金融力量
为向社会公众普及金融保险知识,传递消费者权益保护理念,平安养老保险股份有限公司厦门分公司(以下简称“分公司”)积极开展“78保险公众宣传日”系列教育宣传活动。分公司紧扣“保险,让每一步前行更有底气”主题&#…...

【开源合规】开源许可证风险场景详细解读
文章目录 前言关于BlackDuck许可证风险对比图弱互惠型许可证举个例子具体示例LGPL系列LGPL-2.0-onlyLGPL-2.0-or-laterLGPL-2.1-onlyLGPL-2.1-or-laterLGPL-3.0-onlyLGPL-3.0-or-laterMPL系列MPL-1.0MPL-1.1MPL-2.0EPL系列EPL-1.0EPL-2.0互惠型许可证GPL系列GPL-1.0GPL-2.0GPL-…...

Redis持久化RDB,AOF
目 录 CONFIG动态修改配置 慢查询 持久化 在上一篇主要对redis的了解入门,安装,以及基础配置,多实例的实现:redis的安装看我上一篇: Redis安装部署与使用,多实例 redis是挡在MySQL前面的,运行在内存…...

【持续集成_03课_Linux部署Sonar+Gogs+Jenkins】
一、通过虚拟机搭建Linux环境-CnetOS 1、安装virtualbox,和Vmware是一样的,只是box更轻量级 1)需要注意内存选择,4G 2、启动完成后,需要获取服务器IP地址 命令 ip add 服务器IP地址 通过本地的工具,进…...
mvcc 速读
MVCC(Multi-Version Concurrency Control,多版本并发控制)是MySQL中一种用于实现数据库并发控制的方法,尤其在InnoDB存储引擎中得到了广泛应用。它的主要作用是提高数据库在高并发场景下的性能,并确保数据的一致性。 …...

美容仪维修过程记录
近期维修的家用射频美容仪,发一些维修过程的拆机图片...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...