我正在尝试检查一个Java String是否不是null
,不是空的,也不是空白的。
在我看来,这段代码应该非常适合这项工作。
public static boolean isEmpty(String s) {
if ((s != null) && (s.trim().length() > 0))
return false;
else
return true;
}
根据文档,String.trim()
应该是这样工作的:
返回字符串的副本,省略了前导空格和尾随空格。
如果此String
对象表示空字符序列,或者此String
对象表示的字符序列的第一个和最后一个字符的代码都大于'\u0020'
(空格字符),则返回对此String
对象的引用。
但是,apache/commons/lang/StringUtils.java
的做法略有不同。
public static boolean isBlank(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
return true;
}
根据Java判断指定的字符是否为空格。当且仅当字符满足以下条件之一时,该字符才是Java空格字符:
SPACE_SEPARATOR
、LINE_SEPARATOR
或PARAGRAPH_SEPARATOR
),但也不是不间断的空格('\u00A0'
、'\u2007'
、'\u202F'
).'\t'
,水平TABULATION.'\n'
、U+000A换行符。'\u000B'
,U+000B垂直空格是'\f'
,U+000C换行符。<代码>H234<代码>H135它是D36,U+000D回车。'\u001D'
,组SEPARATOR.'\u001E'
,记录U+001C SEPARATOR.'\u001F'
,单元分隔符为U+001F。如果我没有弄错--或者可能是我没有正确地阅读它-- String.trim()
应该去掉Character.isWhiteSpace()
正在检查的任何字符。它们看起来都在'\u0020'
之上。
在本例中,较简单的isEmpty
函数似乎涵盖了较长的isBlank
所涵盖的所有场景。
在测试case?
isEmpty
和isBlank
的行为有所不同?没有,是否还有其他考虑因素,因此我应该选择isBlank
而不使用isEmpty
对于那些对实际运行测试感兴趣的人,这里有一些方法和单元测试。
public class StringUtil {
public static boolean isEmpty(String s) {
if ((s != null) && (s.trim().length() > 0))
return false;
else
return true;
}
public static boolean isBlank(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
return true;
}
}
和单元测试
@Test
public void test() {
String s = null;
assertTrue(StringUtil.isEmpty(s)) ;
assertTrue(StringUtil.isBlank(s)) ;
s = "";
assertTrue(StringUtil.isEmpty(s)) ;
assertTrue(StringUtil.isBlank(s));
s = " ";
assertTrue(StringUtil.isEmpty(s)) ;
assertTrue(StringUtil.isBlank(s)) ;
s = " ";
assertTrue(StringUtil.isEmpty(s)) ;
assertTrue(StringUtil.isBlank(s)) ;
s = " a ";
assertTrue(StringUtil.isEmpty(s)==false) ;
assertTrue(StringUtil.isBlank(s)==false) ;
}
更新:这是一个非常有趣的讨论-这就是为什么我喜欢Stack Overflow和这里的人们。顺便说一句,回到问题上,我们得到:
isBlank()
的一个与性能相关的原因。感谢@nhahtdh对@devconsole.https://stackoverflow.com/questions/16394787
复制相似问题