当前位置: 首页 > news >正文

Java 之详解字符串拼接(十四)

十四、详解字符串拼接

14.1、+号操作

+ 号操作符其实被 Java 在编译的时候重新解释了,换一种说法就是,+ 号操作符是一种语法糖,让字符串的拼接变得更简便了。

class Demo{public static void main(String[] args){String str1 = "浩妹";String str2 = "好美";System.out.println(str1 + str2);}
}

14.2、String.concat拼接字符串

String 类的 concat() 方法,有点像 StringBuilder 类的 append() 方法。

String str1 = "好美";
String str2 = "浩妹";
System.out.println(str1.concat(str2));

看一下concat的源码

public String concat(String str) {int otherLen = str.length();if (otherLen == 0) {return this;}int len = value.length;char buf[] = Arrays.copyOf(value, len + otherLen);str.getChars(buf, len);return new String(buf, true);
}
  1. 如果拼接的字符串长度为0,那么返回原来的数组

  2. 将原字符串的字符数组value复制到变量buf数组中

  3. 把拼接的字符串 str 复制到字符数组 buf 中,并返回新的字符串对象。

+ 号操作符相比,concat() 方法在遇到字符串为 null 的时候,会抛出 NullPointerException,而“+”号操作符会把 null 当做是“null”字符串来处理。

如果拼接的字符串是一个空字符串(""),那么 concat 的效率要更高一点,毕竟不需要 new StringBuilder 对象。

如果拼接的字符串非常多,concat() 的效率就会下降,因为创建的字符串对象越来越多。

14.3、String.join拼接字符串

String 类有一个静态方法 join(),可以这样来使用

String str1 = "浩妹";
String str2 = "好美";
String str3 = String.join("", str1, str2);
System.out.println(str3);

第一个参数为字符串连接符,比如说:

String message = String.join("-", "浩妹", "太特么", "有趣了");
​
//输出
浩妹-太特么-有趣了

来看一下join的源码

public static String join(CharSequence delimiter, CharSequence... elements) {Objects.requireNonNull(delimiter);Objects.requireNonNull(elements);// Number of elements not likely worth Arrays.stream overhead.StringJoiner joiner = new StringJoiner(delimiter);for (CharSequence cs: elements) {joiner.add(cs);}return joiner.toString();
}

里面新建了一个叫 StringJoiner 的对象,然后通过 for-each 循环把可变参数添加了进来,最后调用 toString() 方法返回 String。

14.4、StringUtils.join拼接字符串

实际的工作中,org.apache.commons.lang3.StringUtilsjoin() 方法也经常用来进行字符串拼接。

String str1 = "浩妹";
String str2 = "好美";
StringUtils.join(str1, str2);

该方法不用担心 NullPointerException。

StringUtils.join(null)            = null
StringUtils.join([])              = ""
StringUtils.join([null])          = ""
StringUtils.join(["a", "b", "c"]) = "abc"
StringUtils.join([null, "", "a"]) = "a"

来看一下源码

public static String join(final Object[] array, String separator, final int startIndex, final int endIndex) {if (array == null) {return null;}if (separator == null) {separator = EMPTY;}
​final StringBuilder buf = new StringBuilder(noOfItems * 16);
​for (int i = startIndex; i < endIndex; i++) {if (i > startIndex) {buf.append(separator);}if (array[i] != null) {buf.append(array[i]);}}return buf.toString();
}

内部使用的仍然是 StringBuilder。

http://www.dtcms.com/a/593013.html

相关文章:

  • Redis集群详解
  • 6 ElasticsearchRestTemplate
  • 第3章:矢量与栅格数据模型
  • java 面试问题
  • Elasticsearch-3--什么是Lucene?
  • 01-SQL 语句的关键字顺序
  • 树莓派Raspberry Pi 5的汉化
  • 小红书推荐系统(牛客)
  • 做网站的猫腻网站的链接结构怎么做
  • 【强化学习】DQN 算法
  • 大模型-详解 Vision Transformer (ViT) (2
  • 学习react第一天
  • 2025年电子会计档案管理软件深度介绍及厂商推荐
  • io_uring 避坑指南
  • (附源码)基于Spring boot的校园志愿服务管理系统的设计与实现
  • deepseek回答 如何用deepseek训练出一个我的思路
  • 3ds Max材质高清参数设置:10分钟提升渲染真实感
  • MyBatis 插件
  • 甘肃省城乡住房建设厅网站首页微商软件自助商城
  • 一文掌握,kanass安装与配置
  • C# ASP.NET MVC 数据验证实战:View 层双保险(Html.ValidationMessageFor + jQuery Validate)
  • 工信部 网站 邮箱内容管理系统做网站
  • arcgis用累计值进行分级
  • 生理学实验系统 生理学实验系统软件 集成化生物信号采集与处理系统生物信号采集处理系统 生理机能实验处理系统
  • 环境变量与程序地址空间
  • Node.js的主要应用场景和简单例子
  • 做视频解析网站是犯法的么360优化大师
  • 大网站cn域名淘宝店铺装修模板免费下载
  • VBA即用型代码手册:利用函数保存为PDF文件UseFunctionSaveAsPDF
  • JPA 的说明和使用