当前位置: 首页 > news >正文

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:类和对象

往期回顾&#xff1a; C 入门02&#xff1a;控制结构和循环-CSDN博客C 入门03&#xff1a;函数与作用域-CSDN博客C 入门04&#xff1a;数组与字符串-CSDN博客 一、前言 在前面文章的学习中&#xff0c;我们了解了 C 的基本结构、变量、输入输出、控制结构、循环、函数、作用域…...

4G LTE教程

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

C++:哈希表

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

自己动手写一个滑动验证码组件(后端为Spring Boot项目)

近期参加的项目&#xff0c;主管丢给我一个任务&#xff0c;说要支持滑动验证码。我身为50岁的软件攻城狮&#xff0c;当时正背着双手&#xff0c;好像一个受训的保安似的&#xff0c;中规中矩地参加每日站会&#xff0c;心想滑动验证码在今时今日已经是标配了&#xff0c;司空…...

keepalive脑裂

keepalive脑裂 调度器的高可用 vip地址主备之间的切换&#xff0c;主在工作时&#xff0c;p地址只在主上&#xff0c;主停止工作&#xff0c;ip飘移到备服务器。 在主备的优先级不变的情况下&#xff0c;主恢复工作&#xff0c;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的时候&#xff0c;编译…...

Perl基础入门指南:从零开始掌握Perl编程

Perl是一种功能强大且灵活的编程语言&#xff0c;广泛应用于系统管理、Web开发、网络编程和文本处理等领域。如果你是编程新手或者想学习一种新的编程语言&#xff0c;Perl是一个不错的选择。本文将带你了解Perl的基础知识&#xff0c;并通过简单的示例代码帮助你快速入门。 什…...

Mybatis SQL注解使用场景

MyBatis 提供了几种常用的注解&#xff0c;主要用于简化 XML 映射文件的编写&#xff0c;使得 SQL 查询和操作可以直接在 Java 接口中定义。下面列出了主要的注解以及它们在被调用时的写法示例&#xff1a; 1. Select Select 注解用于执行查询操作&#xff0c;并将查询结果映…...

Dataset for Stable Diffusion

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

近期matlab学习笔记,学习是一个记录,反复的过程

近期matlab学习笔记&#xff0c;学习是一个记录&#xff0c;反复的过程 matlab的mlx文件在运行的时候&#xff0c;不需要在文件夹路径下&#xff0c;也能运行&#xff0c;但是需要调用子函数时&#xff0c;就需要在文件所在路径下运行 那就先运行子函数&#xff0c;把路径换过来…...

Elasticsearch7.5.2 常用rest api与elasticsearch库

目录 一、rest api 1. 新建索引 2. 删除索引 3. 插入单条数据 4. 更新单条数据 5. 删除单条数据 6. 查询数据 二、python elasticsearch库 1. 新建索引 一、rest api 1. 新建索引 请求方式&#xff1a;PUT 请求URL&#xff1a;http://ip/&#xff08;your_index_nam…...

Autosar Dcm配置-0x28服务ComControl-基于ETAS软件

文章目录 前言DcmDcmDsdDcmDspBswMBswMModeRequestPortBswMModeConditionBswMLogicalExpressionBswMActionBswMActionListBswMRule总结前言 0x28服务主要用来控制非诊断报文的通讯,一般在刷写预编程过程中,用来禁止APP的通信报文,可以减少总线负载率,提高刷写成功率。本文…...

平安养老险厦门分公司:提升金融服务,发挥金融力量

为向社会公众普及金融保险知识&#xff0c;传递消费者权益保护理念&#xff0c;平安养老保险股份有限公司厦门分公司&#xff08;以下简称“分公司”&#xff09;积极开展“78保险公众宣传日”系列教育宣传活动。分公司紧扣“保险&#xff0c;让每一步前行更有底气”主题&#…...

【开源合规】开源许可证风险场景详细解读

文章目录 前言关于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的了解入门&#xff0c;安装&#xff0c;以及基础配置&#xff0c;多实例的实现&#xff1a;redis的安装看我上一篇&#xff1a; Redis安装部署与使用,多实例 redis是挡在MySQL前面的&#xff0c;运行在内存…...

【持续集成_03课_Linux部署Sonar+Gogs+Jenkins】

一、通过虚拟机搭建Linux环境-CnetOS 1、安装virtualbox&#xff0c;和Vmware是一样的&#xff0c;只是box更轻量级 1&#xff09;需要注意内存选择&#xff0c;4G 2、启动完成后&#xff0c;需要获取服务器IP地址 命令 ip add 服务器IP地址 通过本地的工具&#xff0c;进…...

mvcc 速读

MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09;是MySQL中一种用于实现数据库并发控制的方法&#xff0c;尤其在InnoDB存储引擎中得到了广泛应用。它的主要作用是提高数据库在高并发场景下的性能&#xff0c;并确保数据的一致性。 …...

美容仪维修过程记录

近期维修的家用射频美容仪&#xff0c;发一些维修过程的拆机图片...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...