我正在尝试检查字符串是否为空
我只是使用apache.lang.StringUtils isNotBlank
方法检查
String str = " ";
System.out.println(StringUtils.isNotBlank(str)); // Output == true
System.out.println(StringUtils.isNotBlank(str.trim())); // Output == true
// But both expected as false
但每次打印true
。
其他一些字符串工作正常,但是对于高于上面的str值,代码不能按预期工作。
答案 0 :(得分:4)
某些字符可能看似是空格,但它们不是,或者至少Java并不将它们视为空格。在你的情况下,当你执行
System.out.println(Arrays.toString(str.getBytes()));
您输出[-96]
。 -96是160的溢出字节值,即no-breaking space character,但Java Language Specification不会将该字符列为空白字符。
这就是StringUtils.isNotBlank(str)
返回true
的原因,因为您的String具有非空白字符。 str.trim()
删除了空白字符,因此无法触及现有的不间断空格。
您可以通过手动创建具有该字符的字符串来重现该字符:
StringUtils.isNotBlank(new String(new byte[]{-96}));
或
StringUtils.isNotBlank(new String(new byte[]{(byte) 160}));
两个版本都会产生true
。
答案 1 :(得分:1)
您可以在删除所有空格后尝试检查字符串的长度:
String input = " ";
if (input != null && input.replaceAll("\\s+", "").length() > 0) {
System.out.println("Not empty.");
}
else {
System.out.println("Empty");
}
我为此提供了使用Apache
库的替代方法。逻辑是非空字符串是任何不是null
并且其中至少有一个非空白字符的字符串。