Java實(shí)現(xiàn)占位符名稱替換值
前言
占位符現(xiàn)在應(yīng)該說是比較流行的動(dòng)態(tài)賦值,方法有String.format(),通過%s或其他來賦值;或者M(jìn)essageFormat.format(),通過{0}來賦值,參數(shù)名都不可定義
項(xiàng)目中有個(gè)需求,根據(jù)一串帶著參數(shù)名占位符的url,替換掉對(duì)應(yīng)參數(shù)名的值,由此有了以下的工具類。
代碼
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(){} /** * 格式化字符串 字符串中使用{key}表示占位符 * * @param sourStr * 需要匹配的字符串 * @param param * 參數(shù)集 * @return */ 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)); //} }
結(jié)果
https://xxx.com/cfes?c=111&af_siteid=222&clickid=333&android_id=444&advertising_id=555&idfa=
原理
從上面結(jié)果可以看到,對(duì)應(yīng)著參數(shù)名的占位符都被替換成了相應(yīng)的值,原理也很簡(jiǎn)單,根據(jù)表達(dá)式匹配,找出str中的每個(gè)占位符,再根據(jù)傳入的map,找到占位符名稱做key,就能拿到對(duì)應(yīng)的value,然后進(jìn)行替換
到此這篇關(guān)于Java實(shí)現(xiàn)占位符名稱替換值的文章就介紹到這了,更多相關(guān)Java 占位符替換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java和Python現(xiàn)在都挺火,我應(yīng)該怎么選?
這篇文章主要介紹了Java和Python現(xiàn)在都挺火,我應(yīng)該怎么選?本文通過全面分析給大家做個(gè)參考,需要的朋友可以參考下2020-07-07Spring?Boot?@Autowired?@Resource屬性賦值時(shí)機(jī)探究
這篇文章主要為大家介紹了Spring?Boot?@Autowired?@Resource屬性賦值時(shí)機(jī),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07關(guān)于SpringSecurity簡(jiǎn)介以及和Shiro的區(qū)別
這篇文章主要介紹了關(guān)于SpringSecurity簡(jiǎn)介以及和Shiro的區(qū)別,在Java應(yīng)用安全領(lǐng)域,Spring Security會(huì)成為被首先推崇的解決方案,就像我們看到服務(wù)器就會(huì)聯(lián)想到Linux一樣順理成章,需要的朋友可以參考下2023-07-07Java抓包工具fiddler實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā)
Fiddler是一個(gè)http協(xié)議調(diào)試代理工具,本文主要介紹了Java抓包工具fiddler實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Spring Boot 如何自定義返回錯(cuò)誤碼錯(cuò)誤信息
這篇文章主要介紹了Spring Boot 如何自定義返回錯(cuò)誤碼錯(cuò)誤信息的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08