Java中常见的字符串拼接/模板化方式详解

 更新时间:2026年05月09日 14:57:32   作者:思静鱼  
Java 里除了 MessageFormat.format(),常见字符串拼接/模板化方式很多,不同场景适用不同方案,下面小编就和大家详细介绍一下它们的区别和具体使用吧

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
日志{}
国际化 i18nMessageFormat
多行模板""" + .formatted()
集合 joinString.join
HTML/邮件模板FreeMarker/Thymeleaf

你现在这个:阿拉伯语 + i18n + 占位符

最适合的是:

  • MessageFormat
  • 或 ICU4J(更专业国际化)

但如果只是简单替换,其实可以直接:

template.replace("{0}", value)

反而更稳定,不会触发 Locale 自动数字转换。

以上就是Java中常见的字符串拼接/模板化方式详解的详细内容,更多关于Java字符串拼接的资料请关注脚本之家其它相关文章!

相关文章

  • java中sleep方法和wait方法的五个区别

    java中sleep方法和wait方法的五个区别

    这篇文章主要介绍了java中sleep方法和wait方法的五个区别,sleep 方法和 wait 方法都是用来将线程进入休眠状态,但是又有一些区别,下面我们就一起来看看吧
    2022-05-05
  • Java实现AES/CBC/PKCS7Padding加解密的方法

    Java实现AES/CBC/PKCS7Padding加解密的方法

    这篇文章主要介绍了Java实现AES/CBC/PKCS7Padding加解密的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Component-Scan 不扫描jar里面的类问题

    Component-Scan 不扫描jar里面的类问题

    这篇文章主要介绍了Component-Scan 不扫描jar里面的类问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • java实现二维码扫码授权登陆

    java实现二维码扫码授权登陆

    这篇文章主要为大家详细介绍了java实现二维码扫码授权登陆,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • SpringBoot项目部署的四种方式详解

    SpringBoot项目部署的四种方式详解

    本文详细介绍了SpringBoot项目的四种部署方式,包括原始命令部署、宝塔Linux可视化部署、Docker容器化部署和Docker容器平台托管,每种方式都有其特点和适用场景,需要的朋友可以参考下
    2026-04-04
  • Spring基于XML实现Aop

    Spring基于XML实现Aop

    这篇文章主要介绍了Spring中基于xml的AOP的详细步骤,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • 调用Process.waitfor导致的进程挂起问题及解决

    调用Process.waitfor导致的进程挂起问题及解决

    这篇文章主要介绍了调用Process.waitfor导致的进程挂起问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java使用反射来获取泛型信息示例

    Java使用反射来获取泛型信息示例

    这篇文章主要介绍了Java使用反射来获取泛型信息,结合实例形式分析了java基于反射操作泛型信息的相关实现技巧与注意事项,需要的朋友可以参考下
    2019-07-07
  • 使用RestTemplate 调用远程接口上传文件方式

    使用RestTemplate 调用远程接口上传文件方式

    这篇文章主要介绍了使用RestTemplate 调用远程接口上传文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java接收前端请求体的多种方式总结

    Java接收前端请求体的多种方式总结

    这篇文章主要给大家介绍了关于Java接收前端请求体的多种方式,文中通过代码介绍的非常详细,对大家学习或者Java具有一定的参考学习价值,需要的朋友可以参考下
    2023-08-08

最新评论