Java 中拼接String字符串高效方式

YOLOv12改进策略【独家融合改进】| MobileNetV4+BiFPN,轻松实现降参涨点,适用专栏内所有的骨干替换 可扩展的高效物体检测BiFPN(加权双向特征金字塔网络) 阅读详情

Java 提供了拼接 String 字符串的多种方式,不过有时候如果我们不注意 null 字符串的话,可能会把 null 拼接到结果当中,很明显这不是我们想要的。
如果我们想要拼接 String 数组,可以简单的使用 + 运算符进行拼接,但是可能会遇到 null 值。

public static void main(String[] args) {
    String[] values = {"https", "://", "www.", "songzixian", ".com", null};
    String result = "";

    for (String value : values) {
        result = result + value;
    }
    System.out.println(result);
}

控制台打印:https://www.songzixian.comnull
但是,我们已经发现问题了,最后的 null 值作为字符串也拼接了下来,这显然不是我们想要的。

同样,即使我们在 Java 8 或更高版本上运行,然后使用String.join() 静态方法拼接字符串,一样会得到带有 null 值的输出。

public static void main(String[] args) {
    String[] values = {"https", "://", "www.", "wdbyte", ".com", null};
    String result = String.join("", values);
    System.out.println(result );
}

控制台打印:https://www.songzixian.comnull
下面看看一些可以避免 null 值被拼接下来的方法,我的期待的输出结果应该是:
https://songzixian.com

使用 + 运算符

加法符号 + 可以拼接 String 字符串,那么我们只需要在拼接时进行 null 判断就可以把 null 值替换为空字符串了。

for (String value : values) {
  result = result + (value == null ? "" : value);
}

然而,我们知道 String 是一个不可变对象,使用 + 号会频繁的创建字符串对象,每次都会在内存中创建一个新的字符串,所以使用 + 符号来拼接字符串的性能消耗是很高的。
为了方便后续的代码演示,我们抽取一个可以传入字符串,返回一个非 null 字符串的方法。

public String nullToString(String value) {
    return value == null ? "" : value;
}

因此上面的代码可以改为调用这个方法:

for (String value : values) {
    result = result + nullToString(value);
}

String.concat()

String.concat() 是 String 类自带的一个方法,使用这种方式拼接字符串十分方便。

for (String value : values) {
    result = result.concat(getNonNullString(value));
}

StringBuilder(性能最好)

StringBuilder 类提供了很多有用且方便的 String 构建方法。其中比较常用的是 append() 方法,使用 append() 来拼接字符串,同时结合 nullToString() 方法来避免 null 值。

public static void main(String[] args) {
    String[] values = {"https", "://", "www.", "songzixian", ".com", null};
    StringBuilder result = new StringBuilder();
    for (String value : values) {
        if (!("".equals(value) || null == value)) {
            result = result.append(value);
        }
    }
    System.out.println(result);

}

控制台输出:https://www.songzixian.com

String.concat()

public static void main(String[] args) {
    String[] values = {"https", "://", "www.", "songzixian", ".com", null};
    String result = "";
    for (String value : values) {
        if (!("".equals(value) || null == value)) {
            result = result.concat(value);
        }
    }
    System.out.println(result);

}

控制台输出:https://www.songzixian.com

StringJoiner 类 (Java 8+推荐)

StringJoiner 类提供了更强大的字符串拼接功能,不仅可以指定拼接时的分隔符,还可以指定拼接时的前缀和后缀,这里我们可以使用它的 add()方法来拼接字符串。

同样的会用 nullToString() 方法来避免 null 值。

public static void main(String[] args) {
    String[] values = {"https", "://", "www.", "songzixian", ".com", null};
    StringJoiner result = new StringJoiner("");
    for (String value : values) {
        if (!("".equals(value) || null == value)) {
            result = result.add(value);
        }
    }
    System.out.println(result);

}

使用 Streams.filter(比较优雅)

Stream API 是 Java 8 引入的功能强大的流式操作类,可以进行常见的过滤、映射、遍历、分组、统计等操作。其中的过滤操作 filter 可以接收一个 Predicate 函数,Predicate 函数接口同之前介绍的 Function (opens new window)接口一样,是一个函数式接口,它可以接受一个泛型 参数,返回值为布尔类型,Predicate 常用于数据过滤。

因此,我们可以定义一个Predicate 来检查为 null 的字符串,然后传递给 Stream API 的 filter() 方法。

最后再使用 Collectors.joining() 方法拼接剩余的非 null 字符串。


public static void main(String[] args) { String[] values = {"https", "://", "www.", "songzixian", ".com", null}; String result = Arrays.stream(values) .filter(Objects::nonNull) .collect(Collectors.joining()); System.out.println(result); }

StringBuilder 的性能是最好推荐使用,实际使用时要结合具体场景

Python在振动信号处理中的应用(一):振动信号消除多项式趋势项 文章目录一、概述二、最小二乘法去除趋势项原理三、python模块介绍3.1 scikitlearn简介(1)转化器(Transformer)(2)估计器(Estimator)3.2 线性回归LinearRegression3.3 多项式PolynomialFeatures3.4 工作流Pipeline四、python代码实现4.1 构造模拟信号4.2 编写去除趋势项主代码4.3 展示算法效果五、TIPS 一、概述   在振动测试过程中,传感器或采集设备由于自身性能问题或受环境干扰(如温度、供电等影响),容易 阅读详情

相关推荐

Kaamel白皮书:IoT设备安全隐私评估实践

明确评估的目的和预期结果。

kaamelai的博客 1317

Java Stream拼接字符串

java8 stream 拼接字符串

JerryTan89的博客 6835

二阶锥松弛在配电网最优潮流计算中的应用(IEEE33节点配电网最优潮流算例matlab程序)(yalmip+cplex)

文献[7]建立了以支路潮流计算为基础的OPF模型,针对OPF中的非凸性约束,采用SOCR技术将其松弛为二阶锥约束,整个 OPF 模型则被转化为二阶锥规划( Second Order Cone Programming,SOCP)问题,对其求解可以得到全局最优解。其次结合辐射型配电网潮流特点建立支路潮流约束,并考虑配电网中的可控单元,包括分布式电源和离散、连续无功补偿装置,建立其出力约束,该模型为非凸非线性模型;式中,αj,t和βij,t分别为t时段内节点i电压的二次方和支路ij电流的二次方。

weixin_47365903的博客 1万+

Java Stream 拼接字符串

java stream 字符串拼接

fengchengwu2012的博客 4039

【华为OD机试真题】4、字符统计及重排 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数, 并按照字母出现次数从大到小的顺序。输出各个字母及其出现次数。 如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前

KJ.JK 3289

【雷达成像】基于matlab SAR雷达成像仿真【含Matlab源码 3750期】

SAR雷达成像仿真 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1084

Java使用stream将List中所有对象的某个字段拼接成字符串

Java使用stream将List中所有对象的某个字段拼接成字符串

weixin_44380294的博客 2万+

SAP 系统里生成 PDF 的几条主干路径:从 Spool 转换到 Adobe 原生渲染,再到 BTP 云服务

本文系统梳理了SAP生态中PDF生成的多种技术方案,包括Spool转换、OTF转换、Smart Forms/Adobe Forms原生生成以及云端服务等不同路径。文章通过实际案例和代码示例,详细分析了各方案的适用场景、技术要点和工程实践建议,特别强调了多语言支持、字体处理、性能优化等关键因素。针对不同业务需求,提供了从简单导出到复杂交互式PDF的完整解决方案框架,为SAP环境下的PDF处理提供了实用指南。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 288

全面吃透JAVA Stream流操作,让代码更加的优雅

笔者结合在团队中多年的代码检视遇到的情况,结合平时项目编码实践经验,对Stream的核心要点与易混淆用法、典型使用场景等进行了详细的梳理总结,希望可以帮助大家对Stream有个更全面的认知,也可以更加高效的应用到项目开发中去。 ...

是Vzn呀 2537

Windows环境下Ollama的本地部署方案

本文主要介绍了Windows环境下Ollama的本地部署方案,希望对使用大语言模型的同学们有所帮助。 文章目录 1. 前言 2. Windows环境安装 3. API调用示例代码

herosunly的博客 11万+

微信小程序 - 最新详细实现气泡菜单功能,点击任意元素在底部或附近周围弹出气泡菜单列表,仿微信气泡弹框显示菜单快捷功能收纳,自定义气泡弹窗/菜单气泡弹窗,小程序气泡框嵌套菜单组件插件,自动计算弹出定位

微信小程序,vue2,vue3,气泡列表,汽泡菜单,气泡框,泡泡框,悬浮框,悬浮菜单,点击菜单按钮弹出气泡,对话箭头气泡框,弹出的气泡准确定位并吸附在附近,弹出式气泡,弹窗菜单,气泡自定义HTML弹窗,带三角的气泡弹框,三角气泡框里面嵌套菜单,当点击一个按钮或元素时,会从附近弹出一个小气泡一样的菜单列表,自定义气泡框内的内容,点击一个元素在附近弹出一个气泡弹框功能效果,气泡弹框不准怎么办,被盖住了,挡住了,长按弹出,组件插件,微信,自定义气泡菜单组件,气泡弹出框,小程序自定义气泡框,菜单气泡,包裹列表的三角

🏆 前端领域优质创作者 3917

java字符串拼接_Java 字符串拼接 五种方法的性能比较分析

Java 字符串拼接 五种方法的性能比较分析 从执行100次到90万次> 字符串拼接一般使用“+”,但是“+”不能满足大批量数据的处理,Java中有以下五种方法处理字符串拼接,各有优缺点,程序开发应选择合适的方法实现。1. 加号 “+”2. String contact() 方法3. StringUtils.join() 方法4. StringBuffer append() 方法5. Str...

weixin_39664431的博客 1092

【深度学习新浪潮】Score Matching(分数匹配):原理、推导与PyTorch实战

在概率模型训练中,配分函数(归一化常数)是绕不开的难题——尤其是能量模型(EBM)、扩散模型等未归一化模型,直接计算配分函数几乎不可能。Score Matching(分数匹配)作为一种无归一化的参数估计方法,通过拟合概率密度的对数梯度(分数函数),彻底避开了配分函数的计算,成为生成建模、密度估计的核心技术之一。本文将从基础概念出发,逐步推导Score Matching的核心公式,并结合PyTorch实现一个可直接运行的实战案例,帮你彻底理解这一关键技术。Score Matching的核心是。

专注:太空算力、AI infra、异构调度、大模型成本工程 250

Java基础系列(基础):字符串拼接之StringJoiner!

Java基础系列(基础):字符串拼接之StringJoiner! 前言 今天博主将为大家分享:Java基础系列(基础):字符串拼接之StringJoiner!不喜勿喷,如有异议欢迎讨论! 我们都知道要高效拼接字符串,应该使用StringBuilder(线程不安全)或者StringBuffer(线程安全)—类似用分隔符拼接数组的需求很常见,所以Java标准库还提供了一个StringJoiner来干...

Mr_chen的博客 1777

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java 字符串拼接与优化:如何高效操作字符串?String,StringBuilder,StringBuffer

进行拼接操作时,都会创建新的字符串对象,而不会直接修改原有字符串。实际上,Java 编译器会自动优化变量字符串的拼接,将其转换为。是由两个字符串拼接而成的,但实际上,Java 编译器会。还支持字符串的删除和修改。对象,从而在内存中产生多个临时字符串对象。但如果拼接的字符串是变量,情况就不同了。,它允许我们动态修改字符串内容,不会像。个不必要的中间字符串,影响程序效率。它的不可变性意味着,每当对。那样创建额外的对象。这段代码的问题在于,每次。对象,提高了拼接效率。,Java 还提供了。,可以让你的代码更加。

2301_80014343的博客 1168

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python 数组拼接_【转】String字符串的创建,拼接及底层实现

String由于其底层数组是private final的,不可改变,且没有提供任何操作其私有数组的方法,所以String字符串是不可改变的。常量池(与字符串息息相关)任何好的编程语言的关键目标之一是高效的使用内存,随着应用程序的增长,String字面值占用大量的内存非常常见。对程序而言,全部String字面值中往往有大量的冗余,为了使java更高效地使用内存,JVM留出一块特殊的内存区域,称为“S...

weixin_39806779的博客 469

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【七. Java字符串操作与StringBuilder高效拼接技巧】

文章介绍Java字符串相关知识,包括API使用步骤,String类特点、构造方法、比较方式及常用方法,还介绍了StringBuilder、StringJoiner的用法与字符串原理

欢迎来到计算机小白的博客 1417

java字符串拼接_Java-String面试问答

为什么 String 类型要用 final 修饰?从String类的源码可以看出,String是被final修饰的不可继承类,源码如下:public final class String implements java.io.Serializable, Comparable<String>, CharSequence { //...... }那这样设计有什么好处呢?Java语言之父...

weixin_39814925的博客 113

Java中字符串常见的拼接方式

先有StringBuffer后有StringBuilder,两者就像是孪生双胞胎,该有的都有,只不过大哥StringBuffer,大部分方法都经过synchronized修饰,所以StringBuffer是线程安全的,但是它效率就相对StringBuilder较低。实战项目中,我们处理字符串的时候,经常会用到这个类.org.apache.commons.lang3.StringUtils包下,该方法更善于拼接数组中的字符串,并且不用担心NullPointerException。...

山路曲折盘旋,但毕竟朝着顶峰延伸 3万+

Java字符串常用的3种拼接方法

Java字符串常用的3种拼接方法

qq_56965296的博客 3167

Java基础01:Java字符串String类的基本概念和使用

字符串String类的基本概念和使用,字符串的所有基本操作(拼接、截取、反转...),含StringBuilder、StringJoiner

码砖师傅的博客 744

Java中实现高效字符串拼接的几种方法对比

避免在循环中使用`+`运算符进行大量字符串拼接,这是优化Java字符串处理性能的关键点。System.out.println(StringBuilder耗时: + (end2 - start2) + ms);System.out.println(StringBuffer耗时: + (end3 - start3) + ms);System.out.println(+ 运算符耗时: + (end1 - start1) + ms);3. 集合连接:使用String.join()或StringJoiner。

AhoHlckO的博客 392

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

方法在遇到字符串为 null 的时候,会抛出 NullPointerException,而“+”号操作符会把 null 当做是“null”字符串来处理。+ 号操作符其实被 Java 在编译的时候重新解释了,换一种说法就是,+ 号操作符是一种语法糖,让字符串的拼接变得更简便了。如果拼接的字符串是一个空字符串(""),那么 concat 的效率要更高一点,毕竟不需要。把拼接的字符串 str 复制到字符数组 buf 中,并返回新的字符串对象。的效率就会下降,因为创建的字符串对象越来越多。如果拼接的字符串非常多,

weixin_75147612的博客 267

关于String你了解多少

这是本人第一次写博客,以后陆续会写java源码(java8)的解析文章,纯手打,希望大家多多关注。 文章从两大方面讲解,1、介绍,2、源码解析 String类代表了java中的字符串, 一、String特点 1、不可变类,线程安全。 不可变类在语言层面怎么实现的呢?这里用到了java的final关键字,final有三个作用,简单的说修饰的类不可继承,方法不可重写,变量不可修改。而String类和存储字符数据的Char数组就是用final修饰的,string类不可继承,内部数据(char数组)不能修

weixin_32300523的博客 4312

String的拼接

ztao2333的博客 151

String、StringBuilder、StringBuffer

String、StringBuilder、StringBuffer

平平无奇程序媛 121
上一篇: vue页面使用饿了么UI给tabs标题增加下拉选细化分类操作
下一篇: Java多线程基础概述
mmm.c
博客等级 码龄9年 117粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值