有时开发人员会检查 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字段的好方法吗?
答案 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;
}
由于短路评估,如果text
为null
,则此1行条件不会引发NPE。
答案 4 :(得分:1)
对于您的确切问题,我没有比已经发布的更好的答案了。但是,我强烈质疑为什么要将空字符串和null合并为null。空值通常是一个坏主意,引用托尼·霍亚尔(Tony Hoare)的话,这是一个“十亿美元的错误”,他本人发明了空引用。 This blog post有一些很好的论据!
您是否考虑过反方向,将任何空字符串转换为空字符串?这样,您只需要处理大多数代码中的字符串,就可以不再担心空指针异常。
更好的是,查看Optional类型,它表示可能存在或可能不存在的对象。这是Java 8中表示空缺比空值更好的一种方式。这是一个blog post对其进行说明。
答案 5 :(得分:1)
使用番石榴emptyToNull的另一种选择:
text = Strings.emptyToNull(text);