最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java占位符替換五種方式小結(jié)

 更新時間:2024年06月14日 09:08:03   作者:扎Zn了老Fe  
我們經(jīng)常會遇到需要替換字符串中的占位符的情況,本文主要介紹了java占位符替換五種方式小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

簡介

在業(yè)務(wù)開發(fā)中,經(jīng)常需要輸出文本串。其中,部分場景下大部分文本內(nèi)容是一樣的,只有少部分點是不一樣。簡單做法是直接拼接字段,但是這會有個問題。后面如果想要修改內(nèi)容,那么每個地方都要修改,這不符合設(shè)計模式中的開閉原則,面向應(yīng)該對擴展開放,對修改關(guān)閉。

如何解決這個問題? 先來看現(xiàn)實生活中的例子,個人信息填寫。一般會要填寫表格,已經(jīng)定義好了姓名,性別,年齡等字段,只要填寫對應(yīng)的個人信息就好了。在程序開發(fā)中,我們會預(yù)先定義好一個字符串模板,需要改動的點使用占位符。在使用中,使用具體的內(nèi)容替換掉占位符,就能生成我們所需要的文本內(nèi)容。
本文總結(jié)了占位符替換五種方法。前三種方法占位符格式支持自定義。本文使用${param!}的格式,前三種方法示例模板為:

String TEMPLATE = "姓名:${name!},年齡:${age!},手機號:${phone!}";

待填充參數(shù)為:

private static final Map<String, String> ARGS = new HashMap<String, String>() {{
        put("name", "張三");
        put("phone", "10086");
        put("age", "21");
    }};

StringUtils.replace

StringUtils.replace方法定義:

String replace(String text, String searchString, String replacement);

StringUtils.replace能夠?qū)⑷雲(yún)⒅械膕earchString字符串替換成replacement字符串。在使用時,參數(shù)名稱補充上占位符標記。

示例:

String remark = TEMPLATE;
for (Map.Entry<String, String> entry : ARGS.entrySet()) {
    remark = StringUtils.replace(remark, "${" + entry.getKey() + "!}", entry.getValue());
}
System.out.println(remark);

正則表達式Matcher

使用正則表達式依次找到占位符的位置,使用實際參數(shù)替換掉占位符。

示例:

Pattern TEMPLATE_ARG_PATTERN = Pattern.compile("\\$\\{(.+?)!}"); // ${param!}
Matcher m = TEMPLATE_ARG_PATTERN.matcher(TEMPLATE);
StringBuffer sb = new StringBuffer();
while (m.find()) {
    String arg = m.group(1);
    String replaceStr = ARGS.get(arg);
    m.appendReplacement(sb, replaceStr != null ? replaceStr : "");
}
m.appendTail(sb);
System.out.println(sb.toString());

StringSubstitutor

StringSubstitutor功能比較多,使用起來比較靈活。支持默認占位符${param}, 當然也可以自定義前綴和后綴,甚至支持默認值。

public <V> StringSubstitutor(Map<String, V> valueMap);
public <V> StringSubstitutor(Map<String, V> valueMap, String prefix, String suffix);

示例:

StringSubstitutor sub = new StringSubstitutor(ARGS,"${","!}");
System.out.println(sub.replace(TEMPLATE));

MessageFormat.format

Java的自帶類MessageFormat支持做占位符替換,占位符格式為{index}, index是索引號。

String template = "Hello, my home is {0} and I am {1} years old.";
Object[] replageArgs ={"Alice",25};
String message = MessageFormat.format(template, replageArgs);

String.format

String.format同樣可以實現(xiàn)占位符替換。

String template = "Hello, my name is %s and I am %d years old.";
Object[] replageArgs ={"Alice",25};

String message = String.format(template, replageArgs);
System.out.println(message); // 輸出:Hello, my name is Alice and I am 25 years old.

總結(jié)

本文總結(jié)了占位符替換的五種方法。MessageFormat.format和String.format java自帶功能,無需引入外部jar包,能夠完成基本的替換功能。StringUtils.replace, 正則表達式,StringSubstitutor支持自定義占位符格式,能夠完成更復(fù)雜的功能。

參考:

https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/text/StrSubstitutor.html
https://developer.aliyun.com/article/1257908

到此這篇關(guān)于java占位符替換五種方式小結(jié)的文章就介紹到這了,更多相關(guān)java占位符替換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java讀取Excel文件內(nèi)容的簡單實例

    Java讀取Excel文件內(nèi)容的簡單實例

    這篇文章主要介紹了Java讀取Excel文件內(nèi)容的簡單實例,有需要的朋友可以參考一下
    2013-11-11
  • SpringBoot整合logback日志的詳細步驟

    SpringBoot整合logback日志的詳細步驟

    這篇文章主要介紹了SpringBoot整合logback日志的詳細步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Java設(shè)計模式中組合模式應(yīng)用詳解

    Java設(shè)計模式中組合模式應(yīng)用詳解

    組合模式,又叫部分整體模式,它創(chuàng)建了對象組的數(shù)據(jù)結(jié)構(gòu)組合模式使得用戶對單個對象和組合對象的訪問具有一致性。本文將通過示例為大家詳細介紹一下組合模式,需要的可以參考一下
    2022-11-11
  • Spring boot整合shiro+jwt實現(xiàn)前后端分離

    Spring boot整合shiro+jwt實現(xiàn)前后端分離

    這篇文章主要為大家詳細介紹了Spring boot整合shiro+jwt實現(xiàn)前后端分離,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 詳談java中int和Integer的區(qū)別及自動裝箱和自動拆箱

    詳談java中int和Integer的區(qū)別及自動裝箱和自動拆箱

    這篇文章主要介紹了詳談java中int和Integer的區(qū)別及自動裝箱和自動拆箱,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 深入詳解Java中synchronized鎖升級的套路

    深入詳解Java中synchronized鎖升級的套路

    synchronized鎖是啥?鎖其實就是一個對象,隨便哪一個都可以,Java中所有的對象都是鎖,換句話說,Java中所有對象都可以成為鎖。本文我們主要來聊聊synchronized鎖升級的套路,感興趣的可以收藏一下
    2023-04-04
  • Java中使用Thread類和Runnable接口實現(xiàn)多線程的區(qū)別

    Java中使用Thread類和Runnable接口實現(xiàn)多線程的區(qū)別

    這篇文章主要介紹了使用Thread類和Runnable接口實現(xiàn)多線程的區(qū)別,本文給大家介紹了兩種實現(xiàn)方式的步驟,除了以上兩種多線程實現(xiàn)方式,還可以使用 Callable 接口實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Springboot處理跨域的實現(xiàn)方式(附Demo)

    Springboot處理跨域的實現(xiàn)方式(附Demo)

    這篇文章主要介紹了Springboot處理跨域的實現(xiàn)方式(附Demo),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • SpringSecurity-2.7中跨域問題解析

    SpringSecurity-2.7中跨域問題解析

    這篇文章主要介紹了SpringSecurity-2.7中跨域問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • 深入理解Java注解的使用方法

    深入理解Java注解的使用方法

    這篇文章主要為大家詳細介紹了Java注解的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論

喀什市| 六盘水市| 东光县| 霍州市| 东丰县| 云阳县| 乌什县| 平利县| 江孜县| 内丘县| 镇沅| 汉沽区| 屯门区| 平遥县| 天水市| 木兰县| 定西市| 都兰县| 台中市| 内乡县| 丰都县| 牙克石市| 木兰县| 都江堰市| 泰和县| 轮台县| 罗平县| 株洲县| 金山区| 阳城县| 望城县| 疏勒县| 洪泽县| 湖南省| 友谊县| 濮阳县| 镇赉县| 驻马店市| 辽阳市| 泰安市| 赞皇县|