Java实现占位符名称替换值
短信预约 -IT技能 免费直播动态提醒
前言
占位符现在应该说是比较流行的动态赋值,方法有String.format(),通过%s或其他来赋值;或者MessageFormat.format(),通过{0}来赋值,参数名都不可定义
项目中有个需求,根据一串带着参数名占位符的url,替换掉对应参数名的值,由此有了以下的工具类。
代码
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringFormatUtil {
private static final Pattern pattern = Pattern.compile("\\{(.*?)\\}");
private static Matcher matcher;
private StringFormatUtil(){}
public static String format(String sourStr, Map<String, Object> param) {
String tagerStr = sourStr;
if (param == null)
return tagerStr;
try {
matcher = pattern.matcher(tagerStr);
while (matcher.find()) {
String key = matcher.group();
String keyclone = key.substring(1, key.length() - 1).trim();
Object value = param.get(keyclone);
if (value != null)
tagerStr = tagerStr.replace(key, value.toString());
}
}catch (Exception e){
return null;
}
return tagerStr;
}
//public static void main(String[] args) {
// String url = "https://xxx.com/cfes?c={campaign_name}&af_siteid={af_siteid}&clickid={clickid}&android_id={android_id}&advertising_id={advertising_id}&idfa={idfa}";
// Map<String, Object> map = new LinkedHashMap<>();
// map.put("campaign_name", "111");
// map.put("af_siteid", "222");
// map.put("clickid", "333");
// map.put("android_id", "444");
// map.put("advertising_id", "555");
// map.put("idfa", "");
// System.out.println(format(url, map));
//}
}
结果
https://xxx.com/cfes?c=111&af_siteid=222&clickid=333&android_id=444&advertising_id=555&idfa=
原理
从上面结果可以看到,对应着参数名的占位符都被替换成了相应的值,原理也很简单,根据表达式匹配,找出str中的每个占位符,再根据传入的map,找到占位符名称做key,就能拿到对应的value,然后进行替换
到此这篇关于Java实现占位符名称替换值的文章就介绍到这了,更多相关Java 占位符替换内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341