0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

null字符串对象串联的各种方法

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-09 16:27 次阅读

Java 提供了多种方法和类可以用来拼接字符串。但是如果我们不注意 null 对象,则生成的 String 可能包含一些不需要的值。

问题场景

假设我们要拼接的 String 数组的元素,其中任何元素都可能为 null。

举个例子

String[] values = { "Java ", null, "", "is ", "great!" };
String result = "";

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

我们简单地使用 + 运算符执行拼接,得出来的结果是

Java nullis great!

但是,我们正常情况肯定是不喜欢在结果中包含 "null" 值。

同样,如果我们的应用程序在 Java 8 或更高版本上运行,我们使用 String.join() 静态方法获得相同的输出:

String result = String.join("", values);

我们也不能避免在使用 String.join() 方法时连接 null 元素。

让我们看看一些方法来避免这些空元素被串联起来,并获得我们期望的结果:"Java is great"

使用 + 运算符

加法 (+) 运算符被重载以连接 Java 中的字符串。在使用 + 运算符进行连接时,我们可以检查 String 是否为 null,并将 null 字符串替换为空 ("")字符串:

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

assertEquals("Java is great!", result);

或者,我们可以将检查空字符串的代码提取到一个 getNonNullString() 方法中,该方法接受一个String对象并返回一个非空字符串对象:

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

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

但是 String 对象在Java中是不可变的。这意味着每次我们使用 + 运算符连接 String 对象时,都会在内存中创建一个新的 String。因此使用 + 运算符进行拼接是比较浪费资源的。

使用String.concat() 方法

当我们想要拼接 String 对象时,String.concat() 方法是一个不错的选择。

在这里,我们可以使用我们的 getNonNullString() 方法,该方法检查空对象并返回空字符串:

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

getNonNullString()方法返回的空字符串与结果串联,从而忽略null对象。

使用StringBuilder类

StringBuilder 提供了一堆有用且方便的字符串构建方法。其中之一是 append() 方法。

在这里,我们可以使用相同的 getNonNullString() 方法来避免在使用 append() 方法时出现空对象:

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

使用StringJoiner类 (Java 8+)

StringJoiner 类提供了 String.join() 的所有功能,以及一个以给定前缀开头并以给定后缀结尾的选项。我们可以使用它的 add()方法来连接字符串s。

和以前一样,我们可以使用我们的帮助器方法 getNonNullString() 来避免空字符串值被串联起来:

StringJoiner result = new StringJoiner("");

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

String.join() 和 StringJoiner 之间的一个区别是,与 String.join() 不同,我们必须遍历集合(Array、List等)来联接所有元素。

使用Streams.filter (Java 8+)

Stream API 提供大量顺序和并行聚合操作。一个这样的中间流操作是过滤器,它接受一个谓词作为输入,并根据给定的谓词将流转换为另一个流。

因此,我们可以定义一个谓词,该谓词将检查字符串的空值,并将此谓词传递给filter()方法。因此,筛选器将从原始流中筛选出这些空值。

最后,我们可以使用Collectors.joining()连接所有这些非空字符串值,最后将生成的Stream收集到String变量中:

result = Stream.of(values).filter(value - > null != value).collect(Collectors.joining(""));

总结

在本文中,我们演示了避免 null 字符串对象串联的各种方法。总会有不止一种正确的方法来满足我们的要求。因此,我们必须确定哪种方法最适合给定的地方。

我们必须记住,连接String本身可能是一个昂贵的操作,特别是在循环中。因此,始终建议考虑 Java 字符串 API 的性能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2956

    浏览量

    104530
  • 字符串
    +关注

    关注

    1

    文章

    577

    浏览量

    20485
  • null
    +关注

    关注

    0

    文章

    17

    浏览量

    3916
  • string
    +关注

    关注

    0

    文章

    40

    浏览量

    4717
收藏 人收藏

    评论

    相关推荐

    Python字符串的特点和修改字符串的常见四种方法

    Python中修改字符串的几种方法
    发表于 02-26 16:52

    请问JavaScript字符串对象String是什么?

    字符串对象 String 提供了对字符串进行处理的属性和方法
    发表于 11-05 06:39

    python字符串拼接方式了解

    ()方法拼接 用string模块中的Template对象 例子: fruit1 = ‘apples’ fruit2 = ‘bananas’ fruit3 = ‘pears’ 要求: 输出字符串
    发表于 12-06 10:09 1028次阅读

    实践得出Labview字符串分离的四种方法

    1.    第一种方法名称:掐头去尾去脖子使用范围:适用于任何情况流程:步骤一:“拉力1:100g. 拉力2:2000g. 拉力3:30g” “搜索/拆分字符串”(“搜索匹配字符串/字符
    发表于 07-04 16:54 1.2w次阅读
    实践得出Labview<b class='flag-5'>字符串</b>分离的四<b class='flag-5'>种方法</b>

    什么是复制字符串?Python如何复制字符串

    。 在上一篇文章《你真的知道Python的字符串怎么用吗?》里,我突发奇想,将字符串跟列表做了比较,然后发现字符串竟然没有复制的方法。当时没有细想,只说要搁置疑问。过后,有好学的小伙伴
    发表于 11-25 10:32 2988次阅读

    字符串string对象操作的全面总结

        字符串操作看似简单,其实非常重要,不注意的话,经常出现代码运行结果和自己想要的不一致,甚至崩溃。本文总结了一些构建string对象方法、修改string对象
    的头像 发表于 11-11 11:23 1908次阅读
    <b class='flag-5'>字符串</b>string<b class='flag-5'>对象</b>操作的全面总结

    python对齐字符串的两种方法

    当你不指定 < 、>、^ 时,对字符串,默认左对齐;对数值,默认右对齐
    的头像 发表于 04-12 15:27 3296次阅读

    平化字符串处理方法简介

    这里介绍一组有用的字符串处理方法,即平化至字符串和从字符串还原。
    的头像 发表于 09-26 10:20 2228次阅读

    python字符串有哪些特定方法

    python字符串序列操作也适用于列表和元组。 python字符串还有独有方法,即字符串对象的函数,其他
    的头像 发表于 02-23 15:02 671次阅读

    C语言定义字符串的几种方法

    C语言中定义字符串有哪些方法
    的头像 发表于 03-31 09:41 3485次阅读

    Python中检查字符串包含的方法

    Python 有多种处理字符串方法。今天我们介绍如何检查一个字符串中是否包含另一个字符串
    的头像 发表于 05-14 16:02 1.6w次阅读

    代码字符串分割方法

    的 String#split 来分割。 使用 String#split 方法 String 类中 split 方法,是我们平常处理字符串分割最常用的方法之一,它可以根据给定的分隔符或正
    的头像 发表于 09-25 11:42 769次阅读

    如何去掉oracle字符型数据里的null

    等同于空字符串,空字符串是一个有效的值,而NULL值表示未知或不适用的值。在处理数据时,我们有时需要将NULL值替换为其他的值或者将其忽略。 下面是去掉Oracle
    的头像 发表于 12-06 09:46 1203次阅读

    C语言字符串编译函数介绍

    在C语言中,字符串实际上是使用null字符O'终止的一维字符数组。因此,一个以null结尾的
    的头像 发表于 03-07 16:18 475次阅读
    C语言<b class='flag-5'>字符串</b>编译函数介绍

    labview字符串如何转换为16进制字符串

    在LabVIEW中,将字符串转换为16进制字符串是一个常见的需求,尤其是在处理数据通信和硬件接口时。LabVIEW提供了多种方法来实现这一转换,包括使用内置函数、编写VI(Virtual
    的头像 发表于 09-04 15:54 1796次阅读