优雅拼接字符串:StringJoiner 的完整指南

在Java开发中,字符串拼接是高频操作。无论是日志格式化、构建CSV数据,还是生成动态SQL,开发者常需处理分隔符、前缀和后缀的组合。传统的StringBuilder虽然灵活,但代码冗余且易出错。Java 8推出的StringJoiner类,以简洁的链式调用和自动处理边界的能力,成为字符串拼接的优雅解决方案。本文将通过丰富的代码示例,详解StringJoiner的核心功能。

一、StringJoiner 的构造方法

StringJoiner提供了两种构造方法,适应不同场景的字符串拼接需求。

1. ​仅指定分隔符

适用于无需前后缀的简单拼接。

// 语法:StringJoiner(CharSequence delimiter)
StringJoiner joiner = new StringJoiner(", ");
joiner.add("苹果").add("香蕉").add("橙子");
System.out.println(joiner.toString()); // 输出:苹果, 香蕉, 橙子

2. ​指定分隔符 + 前缀 + 后缀

适合需要包裹内容的场景,如JSON数组、带括号的列表等。

// 语法:StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
StringJoiner joiner = new StringJoiner(" | ", "[ ", " ]");
joiner.add("Java").add("Python").add("C++");
System.out.println(joiner.toString()); // 输出:[ Java | Python | C++ ]

二、StringJoiner 的关键方法

通过链式调用,StringJoiner提供高效且直观的操作方式。

1. ​add(CharSequence element)

添加元素,自动处理分隔符的插入位置。

StringJoiner joiner = new StringJoiner("-");
joiner.add("2023").add("08").add("20");
System.out.println(joiner.toString()); // 输出:2023-08-20

2. ​merge(StringJoiner other)

合并两个StringJoiner对象,保留当前对象的分隔符和前后缀。

StringJoiner joiner1 = new StringJoiner(",", "[", "]");
joiner1.add("A").add("B"); StringJoiner joiner2 = new StringJoiner("+", "<", ">");
joiner2.add("1").add("2");joiner1.merge(joiner2); 
System.out.println(joiner1.toString()); // 输出:[A,B,1+2]

3. ​setEmptyValue(CharSequence emptyValue)

设置当无元素时的默认返回值,避免空输出。

StringJoiner joiner = new StringJoiner("/");
joiner.setEmptyValue("暂无数据");
System.out.println(joiner.toString()); // 输出:暂无数据

4. ​toString()

生成最终字符串,自动添加前后缀并移除末尾多余的分隔符。

StringJoiner joiner = new StringJoiner(", ", "{ ", " }");
joiner.add("Name").add("Age").add("City");
System.out.println(joiner.toString()); // 输出:{ Name, Age, City }

三、实战场景与进阶技巧

1. ​与Stream API结合

将集合快速转换为格式化字符串。

List<String> list = Arrays.asList("北京", "上海", "广州");
String result = list.stream().collect(Collectors.joining(", ", "Cities: [", "]"));
System.out.println(result); // 输出:Cities: [北京, 上海, 广州]

2. ​处理空值或过滤元素

灵活跳过无效数据。

List<String> data = Arrays.asList("Java", "", "Python", null);
StringJoiner joiner = new StringJoiner("; ");
data.stream().filter(str -> str != null && !str.isEmpty()).forEach(joiner::add);
System.out.println(joiner.toString()); // 输出:Java; Python

四、注意事项

  1. 版本兼容性:需Java 8及以上环境。
  2. 空值处理:默认允许添加null,但会转换为字符串"null",建议提前过滤。
  3. 性能:底层依赖StringBuilder,适用于常规数据量,超大数据建议直接操作StringBuilder

结语

StringJoiner以极简的设计解决了字符串拼接中的常见痛点,尤其在与Stream API结合时,能大幅提升代码的简洁性和可维护性。无论是日志格式化、数据导出,还是动态查询构建,掌握StringJoiner都能让你的代码更加优雅高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/897337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW闭环控制系统硬件选型与实时性能

在LabVIEW闭环控制系统的开发中&#xff0c;硬件选型直接影响系统的实时性、精度与稳定性。需综合考虑数据采集速度&#xff08;采样率、接口带宽&#xff09;、计算延迟&#xff08;算法复杂度、处理器性能&#xff09;、输出响应时间&#xff08;执行器延迟、控制周期&#x…

Hive的架构

1. 概念 Hive 是建立在 Hadoop 上的数据仓库工具&#xff0c;旨在简化大规模数据集的查询与管理。它通过类 SQL 语言&#xff08;HiveQL&#xff09;将结构化数据映射为 Hadoop 的 MapReduce&#xff0c;适合离线批处理&#xff0c;尤其适用于数据仓库场景。 2. 数据模型 表&a…

深入解析:Linux中KVM虚拟化技术

这篇文章将深入分析Linux中虚拟化技术的实现----KVM技术&#xff0c;从KVM技术的简介、技术架构、以及虚拟机和宿主机交互的重要处理逻辑出发&#xff0c;深入探究KVM技术的实现。 一、KVM简介&#xff1a; 首先&#xff0c;我们先查看一下KVM架构&#xff0c;看看它的整体工…

golang学习笔记——go语言安装及系统环境变量设置

文章目录 go语言安装go envgo getgoproxy测试安装 Go 插件安装 Go 插件依赖工具参考资料用户环境变量和系统环境变量用户环境变量系统环境变量示例设置环境变量的步骤设置用户环境变量设置系统环境变量 验证环境变量总结 2024年最火的5大Go框架1. Gin&#xff1a;高并发接口的“…

3.6c语言

#define _CRT_SECURE_NO_WARNINGS #include <math.h> #include <stdio.h> int main() {int sum 0,i,j;for (j 1; j < 1000; j){sum 0;for (i 1; i < j; i){if (j % i 0){sum i;} }if (sum j){printf("%d是完数\n", j);}}return 0; }#de…

【TI】如何更改 CCS20.1.0 的 WORKSPACE 默认路径

参考链接&#xff1a; 如何更改 CCS Theia 中工作区的默认位置&#xff1f;- Code Composer Studio 论坛 - Code Composer Studio™︎ - TI E2E 支持论坛 --- How to change the default location for the workspace in CCS Theia? - Code Composer Studio forum - Code Comp…

Vue3中动态Ref的魔法:绑定与妙用

前言 在Vue 3的开发过程中,动态绑定Ref是一项非常实用的技术,特别是在处理复杂组件结构和动态数据时。通过动态绑定Ref,我们可以更灵活地访问和操作DOM元素或组件实例,实现更高效的交互和状态管理。本文将详细介绍如何在Vue 3中实现动态Ref的绑定,并通过实例展示其妙用。…

CarPlanner:用于自动驾驶大规模强化学习的一致性自回归轨迹规划

25年2月来自浙大和菜鸟网络的论文“CarPlanner: Consistent Auto-regressive Trajectory Planning for Large-scale Reinforcement Learning in Autonomous Driving”。 轨迹规划对于自动驾驶至关重要&#xff0c;可确保在复杂环境中安全高效地导航。虽然最近基于学习的方法&a…

VS Code连接服务器教程

VS Code是什么 VS Code&#xff08;全称 Visual Studio Code&#xff09;是一款由微软推出的免费、开源、跨平台的代码编辑神器。VS Code 支持 所有主流操作系统&#xff0c;拥有强大的功能和灵活的扩展性。 官网&#xff1a;https://code.visualstudio.com/插件市场&#xff1…

【JavaWeb】Web基础概念

文章目录 1、服务器与客户端2、服务器端应用程序3、请求和响应4、项目的逻辑构成5、架构5.1 概念5.2 发展演变历程单一架构分布式架构 5.3 单一架构技术体系 6、本阶段技术体系 1、服务器与客户端 ①线下的服务器与客户端 ②线上的服务器与客户端 2、服务器端应用程序 我…

安徽省考计算机专业科目2025(持续更新)

目录 第一部分 计算机科学技术基础 第一章 计算机及其应用基础知识 1.1 计算机的特点、分类及其应用 1.2 信息编码与数据表示&#xff1b;数制及其转换方法&#xff1b;算术运算和逻辑运算的过程 第一部分 计算机科学技术基础 第一章 计算机及其应用基础知识 1.1 计算机…

前端知识点---路由模式-实例模式和单例模式(ts)

在 ArkTS&#xff08;Ark UI 框架&#xff09;中&#xff0c;路由实例模式&#xff08;Standard Instance Mode&#xff09;主要用于管理页面跳转。当创建一个新页面时&#xff0c;可以选择标准实例模式&#xff08;Standard Mode&#xff09;或单实例模式&#xff08;Single M…

【leetcode hot 100 73】矩阵置零

解法一&#xff1a;&#xff08;使用两个标记变量&#xff09;用矩阵的第一行和第一列代替方法一中的两个标记数组&#xff08;col、row[ ]&#xff1a;第几列、行出现0&#xff09;&#xff0c;以达到 O(1) 的额外空间。 这样会导致原数组的第一行和第一列被修改&#xff0c;…

【十三】Golang 通道

&#x1f4a2;欢迎来到张胤尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 通道通道声明初始化缓冲机制无缓冲通道代码示例 带…

【JAVA架构师成长之路】【电商系统实战】第12集:秒杀系统性能优化实战(CAN + Nginx + Sentinel)

30分钟课程&#xff1a;秒杀系统性能优化实战&#xff08;CDN Nginx Sentinel&#xff09; 课程目标 掌握静态资源 CDN 加速的配置与优化策略。通过 Nginx 实现负载均衡&#xff0c;提升系统横向扩展能力。使用 Sentinel 实现服务降级&#xff0c;保障核心链路稳定性。 课程…

K8S学习之基础十八:k8s的灰度发布和金丝雀部署

灰度发布 逐步扩大新版本的发布范围&#xff0c;从少量用户逐步扩展到全体用户。 特点是分阶段发布、持续监控、逐步扩展 适合需要逐步验证和降低风险的更新 金丝雀部署 将新版本先部署到一小部分用户或服务器&#xff0c;观察其表现&#xff0c;再决定是否全面推广。 特点&…

毕业项目推荐:基于yolov8/yolo11的苹果叶片病害检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

redis有哪几种持久化方式

Redis 提供了两种持久化方式&#xff1a;RDB&#xff08;Redis Database&#xff09; 和 AOF&#xff08;Append-Only File&#xff09;。它们各有优缺点&#xff0c;适用于不同的场景。以下是它们的原理、优缺点以及如何选择的建议&#xff1a; 1. RDB&#xff08;Redis Datab…

Unity引擎使用HybridCLR(华佗)热更新

大家好&#xff0c;我是阿赵。   阿赵我做手机游戏已经有十几年时间了。记得刚开始从做页游的公司转到去做手游的公司&#xff0c;在面试的时候很重要的一个点&#xff0c;就是会不会用Lua。使用Lua的原因很简单&#xff0c;就是为了热更新。   热更新游戏内容很重要。如果…

DeepSeek R1-7B 医疗大模型微调实战全流程分析(全码版)

DeepSeek R1-7B 医疗大模型微调实战全流程指南 目录 环境配置与硬件优化医疗数据工程微调策略详解训练监控与评估模型部署与安全持续优化与迭代多模态扩展伦理与合规体系故障排除与调试行业应用案例进阶调优技巧版本管理与迭代法律风险规避成本控制方案文档与知识传承1. 环境配…