空字符串检查在java中没有按预期工作

时间:2017-12-14 10:08:01

标签: java

我正在尝试检查字符串是否为空

我只是使用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值,代码不能按预期工作。

2 个答案:

答案 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并且其中至少有一个非空白字符的字符串。