首页 > 编程语言 >Java中常见字符串拼接九种方式

Java中常见字符串拼接九种方式

时间:2024-03-20 18:11:53浏览次数:17  
标签:Java String StringBuilder 字符串 拼接 StringJoiner 九种 Hello

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

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

二、使用 "+" 运算符拼接字符串
这是最常见的字符串拼接方式,可以使用 + 运算符将多个字符串连接起来,例如:


String str1 = "Hello";
String str2 = "World!";
String result = str1 + " " + str2;
System.out.println(result); 
// 输出: Hello World!

『优点』 在于代码书写简单,易于理解和维护。

『缺点』 在于性能问题:每次使用 "+" 运算符连接字符串时,都会创建一个新的 String 对象。如果需要频繁拼接字符串,那么就会产生大量的临时对象,导致内存空间浪费和性能下降。此外,由于 Java 中的 String 对象是不可变的,因此每次修改字符串内容都会创建一个新的 String 对象,也会带来额外的开销。

三、使用 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 差。
「总之,使用这两个类可以避免创建大量的字符串对象,从而提高性能。」

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

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

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

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

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


StringJoiner sj = new StringJoiner(",");
sj.add("apple");
sj.add("orange");
sj.add("banana");
String result = sj.toString();
System.out.println(result); 
// 输出: apple,orange,banana

StringJoiner sj1 = new StringJoiner(",","[","]");
sj1.add("apple1");
sj1.add("orange1");
sj1.add("banana1");
String result1 = sj1.toString();
System.out.println(result1); 
// 输出: apple,orange,banana


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


String[] fruits = {"apple", "banana", "orange"};
List<String> list = Arrays.asList("apple", "banana", "orange")
String result = String.join(", ", fruits);
System.out.println(result); 
// 输出:apple, banana, orange

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

六、使用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()是一种方便、灵活、易用的字符串拼接方式。但 在对性能要求较高的大型项目中,可能需要使用其他更为高效的字符串拼接方式。

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


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

System.out.println(str3);  
// 输出: Hello world

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

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

八、其他几种方式
1、使用 String.format() 方法格式化字符串

String str = String.format("Hello %s", "World");2、使用 Stream实现

List<String> list = Arrays.asList("Hello", "World");
String str = list.stream().collect(Collectors.joining(" "));

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

这里给出自己的建议:

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

 

标签:Java,String,StringBuilder,字符串,拼接,StringJoiner,九种,Hello
From: https://www.cnblogs.com/zhangzhiping35/p/18085808

相关文章

  • JavaScript逆向之代码补环境(以iwencai为例)
    知识点1.浏览器环境与Node环境的区别1.1浏览器环境具有的功能页面渲染功能(1)加载和控制页面元素的能力->在js中由dom对象来完成(2)渲染引擎->和我们基本上无关浏览器本身的一些东西(窗口大小,url)->BOM对象能够执行js的能力->v8引擎负责执行js代码1.2Node环......
  • Java实现后端分页
    分页操作在开发中可以说是最基本的操作,特别是在做各种后台管理系统的时候,不可能一次性查询一千条、一万条数据。这时候就需要进行分页操作。那么在Java后端当中是如何实现分页的呢?下面就来聊一聊Java后端分页。Java分页原理首先说说分页的原理。有几个名词需要解释一下......
  • Java CC链全分析
    CC链全称CommonsCollections(Java常用的一个库)梦的开始CC1环境部署JDK版本:jdk8u65Maven依赖:<dependencies><!--https://mvnrepository.com/artifact/junit/junit--><dependency><groupId>junit</groupId><......
  • Java学习笔记——第二十一天
    网络编程概述网络编程是可以让设备中的程序与网络上其他设备中的程序实现数据交互的编程技术(实现网络通信的)。Java提供了哪些网络编程的包java.net.*包下提供了网络编程的解决方案。基本的通信架构基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Brow......
  • JavaScript 系列教程 II JavaScript 基础知识
    ......
  • 【Java】11k star,一个强大的 Java 版爬虫框架,几行代码即可实现一个爬虫
    From: https://mp.weixin.qq.com/s/rQf4bmHlSucAUlQy7jPNiQwebmagic是一个无须配置、便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫。本项目在GitHub上有11.1KStar,非常热门,让不熟悉爬虫的小白也可以玩转爬虫。“申明:此教程仅供爬虫学习交流使用......
  • JavaScript 模块化
    JavaScript模块化JavaScript的历史问题背景JavaScript在一开始诞生的时候只是用来网页脚本的开发,其实没有模块化和命名空间的概念。JS的模块化需求日益增长。幼年期:无模块化模块化思维的萌芽。需要在页面中加载不同的js:动画库,表单库,格式化工具多种js文件被......
  • javascript:void(0);用法及常见问题解析
    javascript:void(0);是一个常见的JavaScript代码片段,通常用于在HTML中作为超链接的href属性值或者事件处理函数的返回值。下面是关于它的用法和常见问题的解析:用法:作为超链接的href属性值:<ahref="javascript:void(0);">点击这里</a>这样做的作用是让点击链......
  • Java调用python服务接口https遇到证书问题的具体解决
    是这样的,大概前一段时间做过一个业务,一直没有记录下来就是我们的算法部,封装好了一系列的算法,然后是python写的。而我们需要用Java去调用他们的方法。如何处理这个问题呢就是我在python里面写了一个rest-api,暴露出几个接口,供Java这边调。但是不知道为什么算法部当时那边弄了个......
  • 分享自写的一个通用java应用启停脚本
    ##原创转载请标注来源#!/bin/sh#定义程序名及jar包的名(写上你自己的jar包)PROJECT_NAME=/home/xtgl/a/release-1.0.jarFILEPATH=/home/xtgldate=`date+%Y-%m-%d-%H-%M-`##编写判断程序是否正在运行的方法isExist(){......