您的位置 首页 > 数码极客

如何在类里传递字符串


在Java中进行字符串连接有各种方法,但是如果在进行连接时,如果我们不注意空对象,那么最后的结果可能会包含不是我们预期的值。

在本期内容中,我讲给大家讲述一些在连接字符串时处理空字符串对象的方法。

存在的问题

假设我们要对一个字符串数据中的元素进行连接,数组中的元素有可能为空,我们先用“+”进行简单的拼接:

String[] values = { "小黑 ", null, "", "说 ", "Java!" }; String result = ""; for (String value : values) { result = result + value; } 复制代码

上面的代码会将数组中的所有元素都进行连接,最后的结果如下:

但是我们的期望可能是不想在结果中将空对象连接成一个“null”值。

如果我们的程序是在Java 8+版本,可以使用S()方法获得相同的输出:

String[] values = { "小黑 ", null, "", "说 ", "Java!" }; String result = S("", values); Sy(result); 复制代码

但是使用S()方法同样不能避免将空对象连接成一个"null"值。

接下来,我们来看一下有哪些可以避免将空对象连接成“null”值的方法,最后的结果输出“小黑 is coder!”.

使用“+”操作符

在使用**+**运算符连接时,我们可以检查字符串是否为NULL,并将NULL字符串替换为空字符串:

String[] values = {"小黑 ", null, "", "说 ", "Java!"}; String result = ""; for (String value : values) { result = result + (value == null ? "" : value); } 复制代码

这样可以实现将空对象转成空字符串连接。但是,我们都知道在Java中字符串对象是不可变的,这意味着我们每次进行“+”操作时,都会在内存中创建一个新的对象,所以要避免在代码中频繁的进行字符串“+”操作。

使用S()方法

S()方法是一个比较好的选择。

String[] values = {"小黑 ", null, "", "说 ", "Java!"}; String result = ""; for (String value : values) { result = re((value == null ? "" : value)); } Sy(result); 复制代码

查看concat()方法的源码我们可以发现,concat()方法如果传入的参数为null,会抛出空指针异常,这一点和使用“+”操作符有区别,concat()最后也会创建一个新的String对象。

使用StringBuilder类

StringBuilder提供了一些构建字符串的方法,比如append()方法,我们可以使用该方法来完成字符串的拼接:

String[] values = {"小黑 ", null, "", "说 ", "Java!"}; StringBuilder result = new StringBuilder(); for (String value : values) { re((value == null ? "" : value)); } Sy(result); 复制代码

使用StringJoiner类(Java 8+)

StringJoiner类中包含S()方法的功能,并且可以在做拼接时指定前缀、后缀。

我们可以使用StringJoiner的add()方法来连接字符串:

String[] values = {"小黑 ", null, "", "说 ", "Java!"}; StringJoiner result = new StringJoiner(""); for (String value : values) { re((value == null ? "" : value)); } Sy(result); 复制代码

StringJoiner和S()的区别在于S()可以直接传入一个集合,而StringJoiner只能对单个字符串进行拼接。

使用S(Java 8+)

Stream API提供了大量的顺序和并行聚合操作。我们可以使用filter方法,filter方法接受一个Predicate,并会基于这个Predicate将初始流转换成另一个流对象。

所以,我们可以定义一个Predicate来检查字符串的空值,并将该Predicate传递给filter()方法,这样filter()将会把原始流中的空对象过滤掉;

最后,我们可以使用Collec()连接所有这些非空字符串值,将结果流收集到一个字符串变量中:

String[] values = {"小黑 ", null, "", "说 ", "Java!"}; String result = S(values).filter(value -> null != value).collect(Collec("")); Sy(result); 复制代码

小结

本期内容我们讲述了在连接字符串时,如果避免连接空字符串的各种方法,有很多种方法都可以满足我们的要求,所以我们应该找到最合适的哪一个。

要关注的一个点是连接字符串可能是一项昂贵的操作,所以要避免在循环中进行字符串连接,尤其是使用“+”操作符

原文链接:https://juejin.cn/post/7046574282276601864

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何在类里传递字符串,字符串是如何传递的,无效类字符串如何解决”边界阅读