Java中常見的字符串拼接/模板化方式詳解
Java 里除了 MessageFormat.format(),常見字符串拼接/模板化方式很多,不同場景適用不同方案。
1.+拼接(最常用)
String s = "姓名:" + name + ",年齡:" + age;
優(yōu)點(diǎn):
- 最簡單
- 編譯器會(huì)優(yōu)化成
StringBuilder - 性能不錯(cuò)
適合:
- 日常開發(fā)
- 少量拼接
2.StringBuilder
StringBuilder sb = new StringBuilder();
sb.append("姓名:")
.append(name)
.append(",年齡:")
.append(age);
String s = sb.toString();
優(yōu)點(diǎn):
- 性能高
- 大量循環(huán)拼接推薦
適合:
- for 循環(huán)
- 高頻字符串構(gòu)建
3.StringBuffer
StringBuffer sb = new StringBuffer();
sb.append("abc");
特點(diǎn):
- 線程安全(加鎖)
- 比
StringBuilder慢
現(xiàn)在用得少。
4.String.format()
類似 C 語言 printf。
String s = String.format(
"姓名:%s,年齡:%d",
name,
age
);
占位符:
| 占位符 | 類型 |
|---|---|
%s | 字符串 |
%d | 整數(shù) |
%f | 浮點(diǎn) |
%tF | 日期 |
適合:
- 格式化輸出
- SQL/日志模板
缺點(diǎn):
- 性能一般
- 國際化不如
MessageFormat
5.MessageFormat.format()
MessageFormat.format(
"姓名:{0},年齡:{1}",
name,
age
);
特點(diǎn):
- 國際化 i18n 常用
- 支持?jǐn)?shù)字/日期格式
- 支持多語言資源文件
缺點(diǎn):
- 有 Locale 自動(dòng)格式化
'單引號(hào)坑- 阿拉伯語數(shù)字本地化問題
6. Java 15+ Text Block(文本塊)
適合多行模板。
String s = """
用戶:%s
年齡:%d
""".formatted(name, age);
這是現(xiàn)在比較現(xiàn)代的寫法。
7..formatted()(Java 15+)
本質(zhì)是 String.format() 簡化版。
String s = "姓名:%s,年齡:%d"
.formatted(name, age);
比:
String.format(...)
更簡潔。
8.StringJoiner
專門做分隔符拼接。
StringJoiner joiner = new StringJoiner(",");
joiner.add("A");
joiner.add("B");
joiner.add("C");
System.out.println(joiner);
輸出:
A,B,C
9.String.join()
String s = String.join(",", "A", "B", "C");
或者:
List<String> list = Arrays.asList("A", "B", "C");
String s = String.join(",", list);
10. Stream 拼接
List<String> list = Arrays.asList("A", "B", "C");
String s = list.stream()
.collect(Collectors.joining(","));
適合:
- 集合處理
- Stream 風(fēng)格
11. 模板引擎(企業(yè)項(xiàng)目常用)
比如:
- Thymeleaf
- FreeMarker
- Velocity
- Mustache
示例(FreeMarker):
你好 ${name}適合:
- 郵件模板
- HTML
- 國際化文案
- 大段文本
12. SLF4J 日志占位符(日志推薦)
log.info("用戶 {} 登錄,IP {}", name, ip);
特點(diǎn):
- 不會(huì)提前拼接
- 性能更好
- 日志推薦
不要寫:
log.info("用戶:" + name);
企業(yè)開發(fā)推薦
| 場景 | 推薦 |
|---|---|
| 普通拼接 | + |
| 循環(huán)高性能 | StringBuilder |
| 日志 | {} |
| 國際化 i18n | MessageFormat |
| 多行模板 | """ + .formatted() |
| 集合 join | String.join |
| HTML/郵件模板 | FreeMarker/Thymeleaf |
你現(xiàn)在這個(gè):阿拉伯語 + i18n + 占位符
最適合的是:
MessageFormat- 或 ICU4J(更專業(yè)國際化)
但如果只是簡單替換,其實(shí)可以直接:
template.replace("{0}", value)
反而更穩(wěn)定,不會(huì)觸發(fā) Locale 自動(dòng)數(shù)字轉(zhuǎn)換。
以上就是Java中常見的字符串拼接/模板化方式詳解的詳細(xì)內(nèi)容,更多關(guān)于Java字符串拼接的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java中sleep方法和wait方法的五個(gè)區(qū)別
這篇文章主要介紹了java中sleep方法和wait方法的五個(gè)區(qū)別,sleep?方法和?wait?方法都是用來將線程進(jìn)入休眠狀態(tài),但是又有一些區(qū)別,下面我們就一起來看看吧2022-05-05
Java實(shí)現(xiàn)AES/CBC/PKCS7Padding加解密的方法
這篇文章主要介紹了Java實(shí)現(xiàn)AES/CBC/PKCS7Padding加解密的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
java實(shí)現(xiàn)二維碼掃碼授權(quán)登陸
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)二維碼掃碼授權(quán)登陸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
調(diào)用Process.waitfor導(dǎo)致的進(jìn)程掛起問題及解決
這篇文章主要介紹了調(diào)用Process.waitfor導(dǎo)致的進(jìn)程掛起問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
使用RestTemplate 調(diào)用遠(yuǎn)程接口上傳文件方式
這篇文章主要介紹了使用RestTemplate 調(diào)用遠(yuǎn)程接口上傳文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09

