Java 阿帕奇';s StringUtils.isBlank(str)vs.番石榴';isNullOrEmpty(str):您是否应该定期检查空白?

Java 阿帕奇';s StringUtils.isBlank(str)vs.番石榴';isNullOrEmpty(str):您是否应该定期检查空白?,java,string,apache-commons,guava,Java,String,Apache Commons,Guava,使用有什么好处吗 StringUtils.isBlank(str) 来自apachecommons-lang vs 谷歌番石榴 我想在Java项目中替换以下数百种用法: if(str == null || str.isEmpty()) 番石榴似乎是我的项目中上述用法的直接替代品 但根据我对s.O.问题的阅读,似乎有更多的人使用Apache的方法 唯一的区别似乎是StringUtils.isBlank(str)除了检查字符串是空还是空之外,还检查空格 通常检查字符串中的空格是一个好主意,还是

使用有什么好处吗

StringUtils.isBlank(str) 
来自apachecommons-lang

vs

谷歌番石榴

我想在Java项目中替换以下数百种用法:

if(str == null || str.isEmpty())
番石榴似乎是我的项目中上述用法的直接替代品

但根据我对s.O.问题的阅读,似乎有更多的人使用Apache的方法

唯一的区别似乎是
StringUtils.isBlank(str)
除了检查字符串是空还是空之外,还检查空格


通常检查字符串中的空格是一个好主意,还是会在代码中产生与Guava更简单的检查不同的结果?

当您必须接受人类的输入时,您应该原谅并从他们键入的任何文本中去掉前导和尾随空格,如果它在特定应用中有意义


也就是说,使用
isBlank
只是半成品。在进一步处理字符串之前,还需要对字符串进行
修剪
。因此我建议使用
s=trim(s)isNullOrEmpty
isBlank
被高估得难以置信。直接从输入字段中读取用户文本的UI代码可以一劳永逸地删除空白,然后您就可以不再担心它了。

Guava或多或少是为了成为Apache Commons的“下一代”替代品。使用isBlank()和isNullOrEmpty()之间实际上没有什么实际区别,只是一致地使用其中一种。

如果您想使用番石榴来复制isBlank行为,我会使用以下方法:

Strings.nullToEmpty(str).trim().isEmpty()
StringUtils.isBlank(str)
Strings.isNullOrEmpty(String String)

第一个代码示例将仅检查字符串是否为空,它还将包含空格并返回
true

其中as
Strings.isNullOrEmpty(String String)
如果给定字符串为null或为空字符串,则返回
true


当然,它可以产生不同的结果。这两种方法执行的操作并不相同。嘿,别忘了将springs StringUtils添加到这一组中:另请参见:如何将
isBlank
高估?因为直接从输入字段中读取用户文本的UI代码可以一次性删除空白,然后您就可以不再担心它了。@benson,但这是真的吗?为什么要将“”中的空间修剪掉,以便检测到它是空的,而保留“dog”中的空间?假设你能想出一个理由,你多久会想到一次?我坚持认为,
isBlank
是历史上使用最多的库方法。:-)@KevinBourrillion我想,当你处理依赖于这种检查的遗留代码时,你会经常想要它,并且你试图使代码更易于阅读。每次我检查一些关于Guava中不存在的方法的东西,@KevinBourrillion似乎都有一个类似“没人需要这个”或“不应该这样“。人们并不总是在一个完美的世界中工作,可能需要保护他们的数据不受垃圾的影响。你知道,当你处理一个被几十个初学者使用的业务服务时?或者处理一批处理来自50岁IBM大型机编程人员的平面文件的程序,他在你出生之前在他的区域中填充了空格,但对Java没有给出一个f?这是现实生活中的老兄,
isBlank
很有用这就是为什么我写了
s=trim(s)
,而不是
s=s.trim()
trim
将是空安全的变体。但这会有点违背其目的,不是吗
trim(s)
必须先检查
null
才能调用
s.trim()
,此时
Strings.isNullOrEmpty(s')
的用处只有原来的一半
StringUtils.isBlank(s)
似乎它完成了此处所需的所有功能。
isBlank
的缺点是它无法修复输入,因此您最终会根据前端的空白剥离字符串进行验证,但您会继续处理包含字符串的空白,这听起来很奇怪。太糟糕的字符串也没有进行空安全修剪的方法(例如StringUtils.trimToEmpty)。如果他们这样做了,这可能表明他们确实考虑了一些用法。那么,这个问题的核心是空格检查,这是什么呢?
if(str == null || str.isEmpty())
StringUtils.isBlank(null)      = true 
StringUtils.isBlank("")         = true 
StringUtils.isBlank(" ")        = true 
StringUtils.isBlank("bob")      = false
StringUtils.isBlank("  bob  ")  = false