如果String为空,如何设置null值?

时间:2019-01-30 14:42:56

标签: java null java-stream

有时开发人员会检查 String 是否为 null 值,如果是,则将这些String设置为空值:

if (text == null) {
    text = "";
}

我想做的是写相反的 if 语句:

if (text.isEmpty()) {
    text = null;
}

但是...首先-我必须(通常)检查此String是否为null以避免NullPointerException,所以现在看起来像这样(非常丑陋,但是KISS):

if (!text == null) {
    if (text.isEmpty()) {
        text = null;
    }
}

我的班级有几个String字段,我必须为所有这些字段准备此解决方案。 对于更有效的代码有任何基本想法吗?是将它拉伸到lambda表达式并遍历此类中所有String字段的好方法吗?

6 个答案:

答案 0 :(得分:3)

我不知道您想在其中提及与您的问题有关的流的上下文,但是如果您对Apache StringUtils库开放,那么一种选择是使用StringUtils#isEmpty()方法:

if (StringUtils.isEmpty(text)) {
    text = null;
}

答案 1 :(得分:3)

在您的示例中,如果text为null,则text.equals(null)将导致NPE。您将需要这样的内容:

if (text != null && text.isEmpty()) {
    text = null;
}

如果您还希望将空格也视为空,则需要在调用isEmpty()之前先调用trim():

{{2} }

由于您想重用此代码,因此使其成为可从任何类调用的实用程序方法是很有意义的:

if (text != null && text.trim().isEmpty()) {
    text = null;
}

答案 2 :(得分:1)

您可以通过使用以下if语句来做同样的事情,

@Provides

答案 3 :(得分:1)

不要使用equals()来检查字符串是否为null,但是:

if (text == null)

所以

if (text != null && text.isEmpty()) {
    text = null;
}

由于短路评估,如果textnull,则此1行条件不会引发NPE。

答案 4 :(得分:1)

对于您的确切问题,我没有比已经发布的更好的答案了。但是,我强烈质疑为什么要将空字符串和null合并为null。空值通常是一个坏主意,引用托尼·霍亚尔(Tony Hoare)的话,这是一个“十亿美元的错误”,他本人发明了空引用。 This blog post有一些很好的论据!

您是否考虑过反方向,将任何空字符串转换为空字符串?这样,您只需要处理大多数代码中的字符串,就可以不再担心空指针异常。

更好的是,查看Optional类型,它表示可能存在或可能不存在的对象。这是Java 8中表示空缺比空值更好的一种方式。这是一个blog post对其进行说明。

答案 5 :(得分:1)

使用番石榴emptyToNull的另一种选择:

text = Strings.emptyToNull(text);