【Java基础】几种拼接字符串的方法

几种拼接字符串的方法

  • 1.使用 "+" 运算符拼接字符串
  • 2.使用 StringBuilder 或 StringBuffer 类
  • 3.使用 StringJoiner 类
  • 4.使用 String 类 join 方法
  • 5.使用 StringUtils 类
  • 6.使用 String 类 concat 方法
  • 7.使用 String.format() 方法格式化字符串
  • 8.使用 Stream 实现
  • 9.总结

在 Java 编程中,字符串拼接是一项非常基础的操作,它涉及到了很多日常开发工作中常见的场景,例如拼接 SQL 语句、构建 HTTP 请求参数等等。因此,对于掌握好字符串拼接技巧不仅有助于提高代码效率,而且能够避免一些潜在的性能问题。

下面我们就来列举出来几种方式,搭配实例!

1.使用 “+” 运算符拼接字符串

String str1 = "Hello";
String str2 = "World!";
String result = str1 + " " + str2;
System.out.println(result); 
// 输出: Hello World!
  • ✅ 优点:在于代码书写简单,易于理解和维护。
  • ⭕ 缺点:在于性能问题,每次使用 + 运算符连接字符串时,都会创建一个新的 String 对象。如果需要频繁拼接字符串,那么就会产生大量的临时对象,导致内存空间浪费和性能下降。此外,由于 Java 中的 String 对象是不可变的,因此每次修改字符串内容都会创建一个新的 String 对象,也会带来额外的开销。

2.使用 StringBuilder 或 StringBuffer 类

StringBuilder 和 StringBuffer 类都提供了 append() 方法用于拼接字符串。例如:

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World!");
String result = sb.toString();
System.out.println(result); 
// 输出: Hello World!

StringBuffer sb1 = new StringBuffer();
sb1.append("Hello").append(" ").append("World");
String result1 = sb1.toString();
System.out.println(result1); 
// 输出: Hello World!
  • StringBuilder 的优点:
    • StringBuilder 比较轻量级,不需要同步处理,因此更快速。
    • 在单线程环境下使用时,StringBuilder 的性能比 StringBuffer 更好。
  • StringBuilder 的缺点:
    • StringBuilder 是非线程安全的,不能在多线程环境中使用。
    • StringBuilder 不支持指定初始容量以及增量大小,如果需求变化超出了其默认容量,可能会影响性能。
  • StringBuffer 的优点:
    • StringBuffer 是线程安全的,可在多线程环境中使用。
    • StringBuffer 支持指定初始容量以及增量大小,可以根据需求动态调整容量,减少内存重新分配的次数。
  • StringBuffer 的缺点:
    • StringBuffer 比 StringBuilder 重量级,需要同步处理,因此相对较慢。
    • 在单线程环境下使用时,StringBuffer 的性能比 StringBuilder 差。

总之,使用这两个类可以避免创建大量的字符串对象,从而提高性能。

3.使用 StringJoiner 类

StringJoiner 是一种较新的字符串拼接方式,是使用 Java 8 引入的 StringJoiner 类。通过该类,可以更加简洁地实现字符串的拼接。

这种方式在需要将多个字符串拼接成一个以某个特定字符分隔、前后缀的字符串时,比较方便和简洁。

StringJoiner 类提供了三个构造函数:

  • StringJoiner(CharSequence delimiter):使用指定的 分隔符 创建一个 StringJoiner 对象。
  • StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix):使用指定的 分隔符前缀后缀 创建一个 StringJoiner 对象。

然后通过 add() 方法向 StringJoiner 对象添加元素,最后调用 toString() 方法获取拼接后的字符串。例如:

import java.util.StringJoiner;

public class Main {
    public static void main(String[] args) {
        StringJoiner sj = new StringJoiner(",");
        sj.add("apple");
        sj.add("orange");
        sj.add("banana");
        String result = sj.toString();
        System.out.println(result);

        StringJoiner sj1 = new StringJoiner(",","[","]");
        sj1.add("apple1");
        sj1.add("orange1");
        sj1.add("banana1");
        String result1 = sj1.toString();
        System.out.println(result1);
    }
}

在这里插入图片描述

  • ✅ 优点
    • 简单易用:使用 StringJoiner 类很容易理解和使用,只需要指定分隔符和可选的前缀和后缀即可。
    • 线程安全:StringJoiner 是线程安全的,可以在多个线程中同时使用。
    • 可变性:StringJoiner 实例是可变的,可以向其中添加新元素,而不必创建新的实例。
  • ⭕ 缺点
    • 可能会影响性能:虽然 StringJoiner 提供了一种方便的方法来拼接字符串,但在某些情况下可能会影响性能。例如,如果您需要拼接大量的字符串,可能会导致过多的内存分配和垃圾回收。
    • 不适合复杂的字符串操作:StringJoiner 适用于简单的字符串拼接操作,但对于复杂的字符串操作,可能需要使用其他更强大的库或自定义算法。

4.使用 String 类 join 方法

String.join() 方法用于拼接字符串。该方法可以将一个字符串数组或其他可迭代对象中的元素连接成一个字符串,并使用指定的分隔符分隔它们。例如:

String[] fruits = {"apple", "banana", "orange"};
String result = String.join(", ", fruits);
System.out.println(result); 

在这里插入图片描述

优缺点和上面的差不多的,只不过没有上面的 StringJoiner 类强大,可以指定前后缀!

5.使用 StringUtils 类

StringUtils.join() 方法是 Apache Commons Lang 库中的一个字符串工具类方法,有很多个方法重载这里就不展示了,默认不传分隔符。用于将多个字符串拼接成一个字符串。例如:

String[] arr = {"Hello", "World"};
String str = StringUtils.join(Arrays.asList(arr), ' ');
System.out.println(str);
// 输出:Hello World

总的来说,对于小型项目或者对性能要求不高的情况下,StringUtils.join() 是一种方便、灵活、易用的字符串拼接方式。但在对性能要求较高的大型项目中,可能需要使用其他更为高效的字符串拼接方式。

6.使用 String 类 concat 方法

String.concat() 方法用于将一个或多个字符串连接起来形成一个新的字符串。例如:

String str1 = "Hello";
String str2 = "World";
String str3 = str1.concat(" ").concat(str2);

System.out.println(str3);  

在这里插入图片描述

如果拼接的字符串是 nullconcat() 会抛出 NullPointerException。

每次调用 concat() 方法都会创建一个新的字符串对象,只能连接两个字符串。不是很推荐使用!

7.使用 String.format() 方法格式化字符串

String str = String.format("Hello %s", "World");

8.使用 Stream 实现

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Hello", "World");
        String str = list.stream().collect(Collectors.joining(" "));
        System.out.println(str);
    }
}

在这里插入图片描述

9.总结

在 Java 中,字符串拼接是很常见的操作。不同的场景需要选择合适的字符串拼接方式,以达到更高的效率和更好的代码可读性。理解字符串拼接的不同方式,选择适合当前场景的方法能够提高代码效率、可读性和可维护性。因此,在实际开发中,应该根据具体需求,灵活选择合适的字符串拼接方式。

这里给出小编自己的建议:

使用 StringBuilder 或 StringBuffer 更适合「需要频繁修改字符串的场景」,而使用 StringJoiner 则适用于「需要在每个元素之间添加分隔符的场景」,当然 StringUtils 也是可以选择的!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

http代理如何设置手机上网?http代理起到了哪些作用

本文将详细介绍如何设置手机上网使用HTTP代理&#xff0c;以及HTTP代理所起到的作用。 一、HTTP代理是什么&#xff1f; HTTP代理是一种网络协议&#xff0c;它允许客户端与服务器之间进行数据传输。它是一种常用的代理服务&#xff0c;可以帮助用户通过HTTP协议访问被封锁的网…

蓝桥杯物联网竞赛_STM32L071_10_温度传感器扩展模块

原理图&#xff1a; 温度传感器原理图&#xff1a; 其中芯片可以通过SCL和SDA引脚通过I2C通信向温度传感器指定地址获取温度的模拟量 再利用公式将模拟量转换成相应温度即可 实验板接口原理图&#xff1a; 模拟量转相应温度公式&#xff1a; CubMx配置&#xff1a; Keil配置&…

手把手教你做基于stm32的红外、语音、按键智能灯光控制(上)

目录&#xff1a; 1.系统实现目标2.硬件选型和软件准备2.1. 硬件选型2.2 软件准备 3. 硬件IO表4.各个模块的驱动函数4.1. 红外遥控模块4.2. 按键模块4.3. LED灯4.4. BH1750光照度传感器4.5. 红外检测模块 1.系统实现目标 本文所设计的基于单片机的灯光控制系统主要由模式选择功…

Http和WebSocket

客户端发送一次http请求&#xff0c;服务器返回一次http响应。 问题&#xff1a;如何在客户端没有发送请求的情况下&#xff0c;返回服务端的响应&#xff0c;网页可以得服务器数据&#xff1f; 1&#xff1a;http定时轮询 客户端定时发送http请求&#xff0c;eg&#…

layui+ssm实现数据批量删除

layuissm实现数据的批量删除 //数据表格table.render({id: adminList,elem: #adminList,url: ctx "/admin/getAdminList", //数据接口cellMinWidth: 80,even: true,toolbar: #toolbarDemo,//头部工具栏limit: 10,//每页条数limits: [10, 20, 30, 40],defaultToolba…

Facebook推广工具功能科普!

随着社交媒体的普及&#xff0c;Facebook已经成为全球使用最广泛的社交平台之一&#xff0c;对于广大营销人员来说&#xff0c;利用Facebook推广工具进行营销已经成为不可或缺的一部分。 那么&#xff0c;这些推广工具到底有哪些功能呢?本文将为您揭秘Facebook推广工具的强大…

安全测试之推荐工具(一)

文章目录 一、前言二、Web安全&#xff08;一&#xff09;AppScan&#xff08;推荐&#xff09;&#xff08;二&#xff09;AWVS&#xff08;推荐&#xff09;&#xff08;三&#xff09;Burp Suite&#xff08;推荐&#xff09;&#xff08;四&#xff09;OWASP ZAP 三、主机安…

写 SVG 动画必看!SVG系列文章3-动画标签

1、SMIL animation概览 SMIL不是指「水蜜梨」&#xff0c;而是Synchronized Multimedia Integration Language&#xff08;同步多媒体集成语言&#xff09;的首字母缩写简称&#xff0c;是有标准的。本文所要介绍的SVG动画就是基于这种语言。 SMIL允许你做下面这些事情&#…

Harmony Ble蓝牙App(三)特性和属性

Ble蓝牙App&#xff08;三&#xff09;特性使用 前言正文一、获取属性列表二、属性提供者三、获取特性名称四、特性提供者五、加载特性六、源码 前言 在上一篇中我们完成了连接和发现服务两个动作&#xff0c;那么再发现服务之后要做什么呢&#xff1f;发现服务只是让你知道设备…

zxjy001-项目整体介绍

1、项目类型 全栈项目 前端&#xff1a;系统后台&#xff0c;系统前台后端&#xff1a;提供API接口 2、项目技术栈 前端 Vue,Element,Axios,NodeJs后端 Spring Boot,Spring Cloud,MybatisPlus,Spring Security,Redis,Maven,JWT,OAuth2其他技术 阿里云oss服务阿里云视频点播…

SL4010森利威尔DC3.7V升压5V、12V、24V/5A升压恒压电源芯片

SL4010是一款专用的DC-DC升压芯片&#xff0c;可以将3.7V的输入电压升压为5V、12V、24V的输出电压&#xff0c;并能够提供5A的输出电流。该芯片具有恒压输出、高效率、低发热等优点&#xff0c;广泛应用于各种需要高电压、大电流电源的应用中&#xff0c;如LED照明、电动汽车、…

GPIO的使用--点亮外接小灯泡--开关控制

目录 一、确定引脚接线模式 接线时注意以下几点&#xff1a; 二、外接小灯泡引脚连接(以F12引脚为例) 1.正极接GPIOF3.3v电压引脚、负极接F12 2.正极接GPIOF3.3v电压引脚、负极接F12 三、问题检查 一、确定引脚接线模式 小灯泡有两级&#xff1a;正极、负极&#xff0c;…

“影响力”经济:抖音为什么更值得商家、达人长期深耕?

文&#xff5c;新熔财经 作者&#xff5c;叶一城 数亿的活跃用户&#xff0c;简单而自然的切入方式&#xff0c;快速、高频的执行效率&#xff0c;让抖音对电商界的冲击无可阻挡。 这背后&#xff0c;流量玩法登峰造极&#xff0c;是很多人的直接观感。 但实际上&#xff0…

快手直播间自动发言评论软件:开发技术分析与核心代码分享

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 **一、引言** 随着互联网的飞速发展&#xff0c;网络直播已经成为了人们日常生活的一部分。作为中国最大的短视频平台之一&#xff0c;快手也成为了许多主播和观众的首选。然而&am…

【数值计算方法(黄明游)】函数插值与曲线拟合(二):Newton插值【理论到程序】

​ 文章目录 一、近似表达方式1. 插值&#xff08;Interpolation&#xff09;2. 拟合&#xff08;Fitting&#xff09;3. 投影&#xff08;Projection&#xff09; 二、Lagrange插值1. 拉格朗日插值方法2. Lagrange插值公式a. 线性插值&#xff08;n1&#xff09;b. 抛物插值&…

Android Framework 电池提醒相关Dialog熄屏消失的问题

记录一下花了三四天干一天就能完成的需求的傻事。 说在前头&#xff0c;这篇文章记录了电池提醒dialog相关&#xff0c;弹出dialog且熄屏再亮屏dialog不会消失的代码&#xff0c;这篇废话比较多&#xff0c;看正常代码直接跳到代码3。 故事背景 需求要求添加非法电池的弹窗&a…

最强AI之风袭来,你爱了吗?

2017年&#xff0c;柯洁同阿尔法狗人机大战&#xff0c;AlphaGo以3比0大获全胜&#xff0c;一代英才泪洒当场...... 2019年&#xff0c;换脸哥视频“杨幂换朱茵”轰动全网&#xff0c;时至今日AI换脸仍热度只增不减&#xff1b; 2022年&#xff0c;ChatGPT一经发布便轰动全球&a…

【自然语言处理】利用sklearn库函数绘制三维瑞士卷

一&#xff0c;原理介绍 sklearn.datasets.make_swiss_roll&#xff08;&#xff09;函数提供了三维瑞士卷的数据集&#xff0c;我们可以利用他来生成瑞士卷&#xff0c;该函数的用法见sklearn官方文档&#xff1a;官网文档&#xff1a;sklearn.datasets.make_swiss_roll&…

【VTKWidgetRepresentation】第二期 vtkHandleRepresentation

很高兴在雪易的CSDN遇见你 &#xff0c;给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文系统分享vtkHandleRepresentation及其子类&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会继续努力分享&#xff0c;一起进步&am…

SpringBoot——嵌入式 Servlet容器

一、如何定制和修改Servlet容器的相关配置 前言&#xff1a; SpringBoot在Web环境下&#xff0c;默认使用的是Tomact作为嵌入式的Servlet容器&#xff1b; 【1】修改和server相关的配置&#xff08;ServerProperties实现了EmbeddedServletContainerCustomizer&#xff09;例如…