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
其中asStrings.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