广告
返回顶部
首页 > 资讯 > 精选 >Java字符串拼接的示例分析
  • 502
分享到

Java字符串拼接的示例分析

2023-06-20 18:06:45 502人浏览 独家记忆
摘要

这篇文章主要介绍了Java字符串拼接的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。背景字符串拼接不管是在业务上,还是写算法时都会频繁使用到。对于Java来说,字符串

这篇文章主要介绍了Java字符串拼接的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

背景

字符串拼接不管是在业务上,还是写算法时都会频繁使用到。对于Java来说,字符串拼接有着很多种方式,他们之间的区别是什么,对应不同的业务哪种更好用呢。

String底层原理

在讨论字符串拼接时,首先需要知道String的底层原理。

我们这里只讨论jdk1.8之后的情况,看下结构

private final byte[] value;

这一行代码已经可以说明很多东西。字符串实质就是不可变的byte数组。因为不可变,所以对他进行拼接对他拼接实际就是生成了多个对象,这就是不鼓励对字符串进行拼接的原因。但不可变也有很多好处,例如线程安全、可以存在字符串缓冲池复用字符串等。

拼接的方法

经典但有时不优雅的 +

String a = "123";String b = "456";String c = a + b;

c这个字符串就是ab拼接起来的字符串,“123456”

这段代码反编译出来的代码是

String c = (new StringBuilder()).append(a).append(b).toString();

可以看出这个 + 是Java的语法糖,他实际上是调用的StringBuilder,通过append()来进行拼接。关于StringBuilder我们后面再讲,先来讲下这个用法的优缺点。

优点

“+”,最大的优点就是简洁。如果两个字符串需要首尾拼接,+号义不容辞的成为了最好的使用方式。

缺点

说到缺点的话就多了。简洁也是他的最大缺点,也就是不够灵活。

业务一

有一个字符串List,我需要把他们拼接起来,怎么办?

for(String tmp:list){    s += tmp;}

简洁的一批,但是他隐藏着很大的问题!

上面说到这种拼接方式实际是通过StringBuilder的append的方法。你不需要知道他的原理,你只需要知道,每次循环,他都会new一个StringBuilder对象。创建对象的开销是很大的,如果List有几千几万,内存开销和时间开销是不能接受的!

所以阿里巴巴的规范说到:

Java字符串拼接的示例分析

表面上是推荐,实际就是禁止。写算法会消耗大量时间导致不通过,业务也会因为这种方式提高了无故的开销,属于领导看了想打死的代码。

业务二

大家好,我叫XX,我是来自XXX学校的大X学生,我的爱好是XXX。

一个经典的模板,我需要替换掉中间的XXX为controller的参数,怎么办呢?

String s = "大家好,我叫"+name+"我是来自"+school+"学校的大"+num+“学生,我的爱好是”+aihao;

属于可用但极其丑陋的代码。如果其他接口也需要这个模板,我还要把这段话复制到所有位置上吗?如果我要改动这个,我要对所有代码进行改动吗。

万能的StringBuilder

先介绍下StringBuilder的原理。把字符串拼接想象成数组就很好理解了,StringBuilder有点类似于ArrayList,可变数组。

        char[] value;

区别就是没有final修饰,当到达阈值时进行扩容操作。append方法就是往后插入。

那么就可以解决上面业务一的问题了。

StringBuilder sb = new StringBuilder();for(String tmp:list){    sb.append(tmp);}String s = sb.tostring();

相比于上面,只创建了一个StringBuilder对象,减少循环创建的开销。

线程安全的StringBuffer

StringBuffer与StringBuilder相比,有线程安全的优势,通过上的方式。同时导致效率略低于StringBuilder。

灵活的String.fORMat()

这个严格来说应该叫做格式化,但也可以用来拼接。

熟悉C语言的应该能够懂,我这里举一个例子

String msg = String.format(“我是%s小学的学生,我爱吃%s”,"阳光","屎");//输出 我是阳光小学的学生,我爱吃屎

使用字符串链代替%s,生成需要的字符串。也不仅可以拼接字符串,可以看下下图(偷的图,没全部验证过,错了别找我)

Java字符串拼接的示例分析

这种方式就解决了业务二的问题。通过编写枚举或者常量字符串留出对应的位置,使用时再用String.format()拼接。

有点绿色的concat

为什么说他绿色呢,就是我还没有找到他有什么优势。

String s = "123".concat("456");//结果等价于String s = "123" + "456";

concat方法的原理是数组扩容后复制之前的内容并写新的内容,和StringBuilder底层有点相像。

但是相比于“+”号来说,既不简便,又没有什么效率上的提高。在循环字符串拼接的条件,效率上会略有一点优势,但是这种情况是根本不被允许的,所以concat就很鸡肋。

JDK1.8优雅写法

刚才提到业务一的解决办法可以使用朴素的StringBuilder来解决,但是对于业务代码来说有一点冗长。
Jdk1.8给出了优雅的答案

String s = String.join("_", list);

一行代码,就可以把list里的字符串通过“_”拼接起来。

经典的Guava

guava是我们crud程序员的好伙伴,这里就不用多说了。我们最常接触到的其实就是guava的本地缓存和字符串操作。

String result = Joiner.on(",").join(list);

也是简洁的一句话,但是相比于jdk本土的字符串方法来说,他还有一些其他的特性。例如可以把为null的数组给跳过或者替换掉等等。功能要比jdk的要丰富一点。在正常的WEB项目里基本都会有Guava的依赖,使用起来还是很方便的

感谢你能够认真阅读完这篇文章,希望小编分享的“Java字符串拼接的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: Java字符串拼接的示例分析

本文链接: https://www.lsjlt.com/news/299009.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java字符串拼接的示例分析
    这篇文章主要介绍了Java字符串拼接的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。背景字符串拼接不管是在业务上,还是写算法时都会频繁使用到。对于Java来说,字符串...
    99+
    2023-06-20
  • SQL中字符串拼接的示例分析
    这篇文章主要为大家展示了“SQL中字符串拼接的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SQL中字符串拼接的示例分析”这篇文章吧。一、概述相信大家在...
    99+
    2022-10-18
  • SpringMVC+Ajax+拼接html字符串的示例分析
    这篇文章将为大家详细讲解有关SpringMVC+Ajax+拼接html字符串的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SpringMVC的简单增删改查(SS...
    99+
    2022-10-19
  • MySQL字符串拼接与分组拼接字符串实例代码
    目录一、经典拼接concat(x,x,....)二、分隔符拼接CONCAT_WS(separator,str1,str2,...)三、分组拼接GROUP_CONCAT(expr)补充:在筛选查询...
    99+
    2023-02-02
    mysql字符串拼接 mysql拼接多个字符串 mysql字符串拼接函数
  • Shell 字符串拼接的实现示例
    1. 字符串声明 概述 字符串的基本操作 脚本 1 # 声明字符串 str01="str01" echo ${str01} # 单引号也可以 # 不过后面的例子, 通常是用 双引号, 具体原因, 以后会解...
    99+
    2022-06-04
    Shell 字符串拼接
  • Java字符串操作的示例分析
    这篇文章主要介绍了Java字符串操作的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。✨字符, 字节与字符串字符与字符串字符串内部包含一个字符数组,String 可以和...
    99+
    2023-06-25
  • Java拼接list字符串
    List list = Arrays.asList("Java", "HTML", "JS", "Redis", "language");String result = list.stream().collect(Collectors.jo...
    99+
    2023-09-05
    java list 开发语言 tdd
  • Java字符串拼接详解
    目录一、“+” 操作符二、StringBuilder(非线程安全)三、StringBuffer(线程安全)四、String 类的 concat 方法五、Str...
    99+
    2022-11-13
  • Java字符串拼接效率分析及怎么实践
    Java字符串拼接效率分析及怎么实践,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java连接字符串有多种方式,比如+操作符,StringBuilder.append方法,这些...
    99+
    2023-06-17
  • Java代码中4种字符串拼接方式分析
    目录结论最佳实践分析过程环境分析用示例代码:代码及结果分析本文研讨的字符串拼接方式为以下4种:“+”号、StringBuilder、StringJoiner、...
    99+
    2022-11-13
  • Java字符串逆序方法的示例分析
    小编给大家分享一下Java字符串逆序方法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.简述记录下实现字符串逆序的两种方法:第一种方法比较暴力,通过字...
    99+
    2023-06-29
  • PHP中字符串的示例分析
    小编给大家分享一下PHP中字符串的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前面几篇文章中,我们也有提到有关于PHP的字符串等相关问题,那么几天我们继...
    99+
    2023-06-15
  • pandas中拼接字符串cat()方法的使用示例
    小编给大家分享一下pandas中拼接字符串cat()方法的使用示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!既然在pandas中有分割字符串的方法,那么也是拼...
    99+
    2023-06-14
  • redis字符串类型的示例分析
    这篇文章主要介绍redis字符串类型的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们都知道redis是采用C语言开发,那么在C语言中表示string都是采用char[]数...
    99+
    2022-10-18
  • es6模板字符串的示例分析
    小编给大家分享一下es6模板字符串的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下作为前端开发者避免不了根据后台...
    99+
    2022-10-19
  • JavaScript字符串对象的示例分析
    这篇文章主要介绍了JavaScript字符串对象的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JavaScript 对象是一种复合...
    99+
    2022-10-19
  • python字符串操作的示例分析
    这篇文章主要为大家展示了“python字符串操作的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python字符串操作的示例分析”这篇文章吧。字符串操作...
    99+
    2022-10-19
  • python字符串乘法的示例分析
    这篇文章将为大家详细讲解有关python字符串乘法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。字符串乘法在Python中,不仅可以乘以数字,还可以乘以字符串。例如:关于“python字符串乘法...
    99+
    2023-06-27
  • Java字符串拼接的优雅方式实例详解
    目录背景String底层原理拼接的方法经典但有时不优雅的 +优点缺点业务一万能的StringBuilder线程安全的StringBuffer灵活的String.format()有点绿...
    99+
    2022-11-12
  • 浅析Golang中字符串拼接问题
    目录1.概述2.Golang中字符串拼接的方式3.总结1.概述 Go的字符串是一个不可改变的数据结构,这和其他语言如JAVA,C++等的设定很类似.总体来说,有如下五种拼接方式,下面...
    99+
    2023-05-15
    Golang字符串拼接 Go 字符串拼接 Golang字符串
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作