mysql替换占位符_【占位符替换】替换String中的占位符标志位{placeholder}

概述

占位符替换, 占位符表示为:{placeholder};

示例:替换如下{xxx}占位符中的内容

"名字:{name},年龄:{age},学校:{school}"

提供了两种不同的替换方式:

使用Map对占位符的内容进行替换;

使用POJO对象,对占位符中的内容替换;

代码

import com.google.common.base.Strings;

import com.google.common.collect.Sets;

import org.springframework.util.CollectionUtils;

import org.springframework.util.ObjectUtils;

import java.beans.PropertyDescriptor;

import java.lang.reflect.Method;

import java.util.Map;

import java.util.Set;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/**

* Desc: 占位符替换, 占位符表示为:{@code {placeholder}};

*

* 示例:替换如下{xxx}占位符中的内容

*

"名字:{name},年龄:{age},学校:{school}"

*/

public class PlaceHolderReplaceUtils {

private static final Pattern pattern = Pattern.compile("\\{(.*?)\\}");

private static Matcher matcher;

/**

* 替换字符串占位符, 字符串中使用{key}表示占位符

*

* @param sourceString 需要匹配的字符串,示例:"名字:{name},年龄:{age},学校:{school}";

* @param param 参数集,Map类型

* @return

*/

public static String replaceWithMap(String sourceString, Map param) {

if (Strings.isNullOrEmpty(sourceString) || CollectionUtils.isEmpty(param)) {

return sourceString;

}

String targetString = sourceString;

matcher = pattern.matcher(sourceString);

while (matcher.find()) {

try {

String key = matcher.group();

String keyclone = key.substring(1, key.length() - 1).trim();

Object value = param.get(keyclone);

if (value != null) {

targetString = targetString.replace(key, value.toString());

}

} catch (Exception e) {

throw new RuntimeException("String formatter failed", e);

}

}

return targetString;

}

/**

* 替换字符串占位符, 字符串中使用{key}表示占位符

*

* 利用反射 自动获取对象属性值 (必须有get方法)

*

* @param sourceString 需要匹配的字符串

* @param param 参数集

* @return

*/

public static String replaceWithObject(String sourceString, Object param) {

if (Strings.isNullOrEmpty(sourceString) || ObjectUtils.isEmpty(param)) {

return sourceString;

}

String targetString = sourceString;

PropertyDescriptor pd;

Method getMethod;

// 匹配{}中间的内容 包括括号

matcher = pattern.matcher(sourceString);

while (matcher.find()) {

String key = matcher.group();

String holderName = key.substring(1, key.length() - 1).trim();

try {

pd = new PropertyDescriptor(holderName, param.getClass());

getMethod = pd.getReadMethod(); // 获得get方法

Object value = getMethod.invoke(param);

if (value != null) {

targetString = targetString.replace(key, value.toString());

}

} catch (Exception e) {

throw new RuntimeException("String formatter failed", e);

}

}

return targetString;

}

/**

* 查找String中的占位符keys;

* 示例: "名字:{name},年龄:{age},学校:{school}", 则返回:Set[name,age,school]

*

* pattern示例:

*

 {@code

* // 尖括号: 表示为占位符

* Pattern pattern = Pattern.compile("\\");

*

* // 大括号:{placeHolder} 表示为占位符, 上面的示例中就使用{}作为占位符

* Pattern pattern = Pattern.compile("\\{(.*?)\\}");

* }

*

*

* @param sourceString

* @param pattern

* @return

*/

public static Set findPlaceHolderKeys(String sourceString, Pattern pattern) {

Set placeHolderSet = Sets.newConcurrentHashSet();

if (Strings.isNullOrEmpty(sourceString) || ObjectUtils.isEmpty(pattern)) {

return placeHolderSet;

}

String targetString = sourceString;

matcher = pattern.matcher(sourceString);

while (matcher.find()) {

String key = matcher.group(); //示例: {name}

String placeHolder = key.substring(1, key.length() - 1).trim(); //示例: name

placeHolderSet.add(placeHolder);

}

return placeHolderSet;

}

}

测试代码

package com.chinamobile.epic.regex;

import com.google.common.collect.Maps;

import lombok.AllArgsConstructor;

import lombok.Data;

import org.junit.Test;

import java.util.Map;

public class PlaceHolderReplaceUtilsTest {

@Test

public void replaceWithMap() throws Exception {

String sourStr = "名字:{name},{name},年龄:{age},{school},学校:{school}";

Map map = Maps.newHashMap();

map.put("name", "Tom");

map.put("age", 27);

map.put("school", "Beijing");

String tagerStr = PlaceHolderReplaceUtils.replaceWithMap(sourStr, map);

System.out.println(tagerStr);

}

@Test

public void replaceWithObject() throws Exception {

String sourStr = "名字:{name},{name},年龄:{age},{school},学校:{school}";

Person person = new Person("ZhangSan", "Suzhou", 45);

String tagerStr = PlaceHolderReplaceUtils.replaceWithObject(sourStr, person);

System.out.println(tagerStr);

}

@Data

@AllArgsConstructor

public static class Person {

private String name;

private String school;

private int age;

}

}

结果输出

名字:ZhangSan,ZhangSan,年龄:45,Suzhou,学校:Suzhou

名字:Tom,Tom,年龄:27,Beijing,学校:Beijing

替换SQL字段中的换行符,回车符

替换SQL字段中的换行符,回车符: 在富文本内容中通常会出现回车.换行内容.在sql数据库中这些回车.换行符,输出html后,表现为空格. 这里是在数据导出.导入中发现的,通常把回车.换行符找出来,用 ...

将html中的br换行符转换为文本输入中的换行符(转)

PHP中的有个非常好的函数:nl2br(),将文本框中的换行转换为HTML页面的
,但是如何实现将html中的
换行符转换为文本框中的换行符呢?下面这几个方 ...

php函数nl2br的反函数br2nl 将html中的br换行符转换为文本输入中的换行符

下面这几个方法将能够帮你解决这个问题. PHP版将html中的
换行符转换为文本框中的换行符: 代码如下: function br2nl($text){ return preg_ ...

安卓编程资源文件string中对占位符的使用详解

这里将为你详细介绍占位符的使用,将其学以致用,可以达到简化布局文件,减少字符串资源量. 1.在资源文件中的使用. 打开资源文件中的strings.xml文件,进行编辑.如下图所示: 图  1.0 2. ...

SQL Server之替换文本内容中的回车符和换行符

UPDATE 表 SET 栏位A = REPLACE(栏位A, CHAR(10), '') UPDATE表 SET 栏位A = REPLACE(栏位A, CHAR(13), '')

【正则表达式】使用正则表达式的group,查找出String中的参数值

需求 指标基本格式: clm.{type}.{hostId}.$metricItem 示例1: // 待匹配表达式: summarize(clm.pm ...

string中常用的函数

string中常用的函数 发现在string在处理这符串是很好用,就找了一篇文章放在这里了.. 用 string来代替char * 数组,使用sort排序算法来排序,用unique 函数来去重1.De ...

使用MessageFormat替换字符中的占位符

使用String.format可以实现字符串的格式化功能,即将后面参数中的值替换掉format中的%s,%d这些值.但MessageFormat更为强大,不用管传入值是字符串还是数字,使用占位符即可. ...

Java替换字符串中的占位符

在开发中,会有动态配置字符串其中的某些字符,如何使用字符中的占位符,并且在代码动态替换占位符实现动态配置字符串! 1.定义字符串时,再string文件添加字符串: 注意!记得要在字符文件中加上这些: ...

随机推荐

hadoop-1.2.0 eclipse插件编译

linux.windows下通用,亲测. 下面以window为例,假设:hadoop工程目录位于D:\work\eclipse64\hadoop-1.2.0.1.3.0.0,eclipse安装目录为E ...

mysql 打包表在phpmyadmin提示正在使用中..

一,利用phpmyadmin修改表功能,REPAIR TABLE `你的表名` 或直接在数据库管理界面,选中表如下图 二,如果利用修改功能失败了我们还可以尝试在替换本地mysql数据库时,我们先停止m ...

WordPress 实用SEO插件总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值