Java中常见的字符串拼接/模板化方式详解
Java 里除了 MessageFormat.format(),常见字符串拼接/模板化方式很多,不同场景适用不同方案。
1.+拼接(最常用)
String s = "姓名:" + name + ",年龄:" + age;
优点:
- 最简单
- 编译器会优化成
StringBuilder - 性能不错
适合:
- 日常开发
- 少量拼接
2.StringBuilder
StringBuilder sb = new StringBuilder();
sb.append("姓名:")
.append(name)
.append(",年龄:")
.append(age);
String s = sb.toString();
优点:
- 性能高
- 大量循环拼接推荐
适合:
- for 循环
- 高频字符串构建
3.StringBuffer
StringBuffer sb = new StringBuffer();
sb.append("abc");
特点:
- 线程安全(加锁)
- 比
StringBuilder慢
现在用得少。
4.String.format()
类似 C 语言 printf。
String s = String.format(
"姓名:%s,年龄:%d",
name,
age
);
占位符:
| 占位符 | 类型 |
|---|---|
%s | 字符串 |
%d | 整数 |
%f | 浮点 |
%tF | 日期 |
适合:
- 格式化输出
- SQL/日志模板
缺点:
- 性能一般
- 国际化不如
MessageFormat
5.MessageFormat.format()
MessageFormat.format(
"姓名:{0},年龄:{1}",
name,
age
);
特点:
- 国际化 i18n 常用
- 支持数字/日期格式
- 支持多语言资源文件
缺点:
- 有 Locale 自动格式化
'单引号坑- 阿拉伯语数字本地化问题
6. Java 15+ Text Block(文本块)
适合多行模板。
String s = """
用户:%s
年龄:%d
""".formatted(name, age);
这是现在比较现代的写法。
7..formatted()(Java 15+)
本质是 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 风格
11. 模板引擎(企业项目常用)
比如:
- Thymeleaf
- FreeMarker
- Velocity
- Mustache
示例(FreeMarker):
你好 ${name}适合:
- 邮件模板
- HTML
- 国际化文案
- 大段文本
12. SLF4J 日志占位符(日志推荐)
log.info("用户 {} 登录,IP {}", name, ip);
特点:
- 不会提前拼接
- 性能更好
- 日志推荐
不要写:
log.info("用户:" + name);
企业开发推荐
| 场景 | 推荐 |
|---|---|
| 普通拼接 | + |
| 循环高性能 | StringBuilder |
| 日志 | {} |
| 国际化 i18n | MessageFormat |
| 多行模板 | """ + .formatted() |
| 集合 join | String.join |
| HTML/邮件模板 | FreeMarker/Thymeleaf |
你现在这个:阿拉伯语 + i18n + 占位符
最适合的是:
MessageFormat- 或 ICU4J(更专业国际化)
但如果只是简单替换,其实可以直接:
template.replace("{0}", value)
反而更稳定,不会触发 Locale 自动数字转换。
以上就是Java中常见的字符串拼接/模板化方式详解的详细内容,更多关于Java字符串拼接的资料请关注脚本之家其它相关文章!
相关文章
springboot项目中的bootstrap.yml配置不生效的原因及解决(没有自动提示)
新创建一个 springboot项目,添加了 bootstrap.yml 文件,发现文件并没有如预期变成绿色叶子,编写的时候也没有自动提示,启动的时候,发现端口是8080,由此发现配置并没有生效,所以本文给大家讲解了springboot项目中的bootstrap.yml配置不生效的原因及解决2024-01-01
java跳出循环的三种方式总结(break语句、continue语句和return语句)
在实际编程中,有时需要在条件语句匹配的时候跳出循环,下面这篇文章主要给大家介绍了关于java跳出循环的三种方式,其中包括break语句、continue语句和return语句的相关资料,需要的朋友可以参考下2023-03-03
SpringMVC运行时出现404错误的解决办法汇总(基本包含所有错误可能)
初学SpringMVC基本都会碰到404问题(确实也困扰了我好长时间),但出现404问题的原因有很多,如果确认路径,代码没问题,并且服务器可以正常启动,依然出现404问题的话,就根据本篇步骤逐一排查,需要的朋友可以参考下2024-04-04
Idea报错: A JNI error has occurred的问题
这篇文章主要介绍了Idea报错: A JNI error has occurred的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-08-08


最新评论