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字符串拼接的资料请关注脚本之家其它相关文章!

相关文章

  • 浅谈序列化之protobuf与avro对比(Java)

    浅谈序列化之protobuf与avro对比(Java)

    下面小编就为大家带来一篇浅谈序列化之protobuf与avro对比(Java)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • springboot项目中的bootstrap.yml配置不生效的原因及解决(没有自动提示)

    springboot项目中的bootstrap.yml配置不生效的原因及解决(没有自动提示)

    新创建一个 springboot项目,添加了 bootstrap.yml 文件,发现文件并没有如预期变成绿色叶子,编写的时候也没有自动提示,启动的时候,发现端口是8080,由此发现配置并没有生效,所以本文给大家讲解了springboot项目中的bootstrap.yml配置不生效的原因及解决
    2024-01-01
  • java跳出循环的三种方式总结(break语句、continue语句和return语句)

    java跳出循环的三种方式总结(break语句、continue语句和return语句)

    在实际编程中,有时需要在条件语句匹配的时候跳出循环,下面这篇文章主要给大家介绍了关于java跳出循环的三种方式,其中包括break语句、continue语句和return语句的相关资料,需要的朋友可以参考下
    2023-03-03
  • Java自动化实现PowerPoint转换为PDF

    Java自动化实现PowerPoint转换为PDF

    在日常的企业运营和个人工作中,PowerPoint(PPT/PPTX)文件因其强大的演示功能而被广泛使用,本文将详细介绍如何利用 Spire.Presentation for Java 库,通过简洁高效的代码实现 PowerPoint 到 PDF 的转换,需要的可以了解下
    2025-08-08
  • Java上传文件到服务器端的方法

    Java上传文件到服务器端的方法

    这篇文章主要为大家详细介绍了Java上传文件到服务器端的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • SpringMVC运行时出现404错误的解决办法汇总(基本包含所有错误可能)

    SpringMVC运行时出现404错误的解决办法汇总(基本包含所有错误可能)

    初学SpringMVC基本都会碰到404问题(确实也困扰了我好长时间),但出现404问题的原因有很多,如果确认路径,代码没问题,并且服务器可以正常启动,依然出现404问题的话,就根据本篇步骤逐一排查,需要的朋友可以参考下
    2024-04-04
  • Idea报错: A JNI error has occurred的问题

    Idea报错: A JNI error has occurred的问题

    这篇文章主要介绍了Idea报错: A JNI error has occurred的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Java 程序初始化顺序

    Java 程序初始化顺序

    这篇文章主要介绍了Java 程序初始化顺序,在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有的类成员完成了初始化之后,才会调用对象所在类的构造函数创建对象,需要的朋友可以参考一下
    2022-01-01
  • java语言与平台基础知识点

    java语言与平台基础知识点

    在本篇文章里小编给大家整理的是一篇关于java语言与平台基础知识点内容,有需要的朋友们跟着学习下。
    2019-11-11
  • SpringBoot使用Caffeine实现缓存的示例代码

    SpringBoot使用Caffeine实现缓存的示例代码

    本文主要介绍了SpringBoot使用Caffeine实现缓存的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论