簡體   English   中英

空字符串檢查無法在Java中按預期方式工作

[英]empty string checking not working as expected in 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值,則無法正常工作。

有些字符可能看起來是空格,但不是,或者至少Java並不認為它們是空格。 就您而言,當您執行

System.out.println(Arrays.toString(str.getBytes()));

您得到[-96]作為輸出。 -96是160的溢出字節值,它是不間斷的空格字符 ,但是Java語言規范沒有將該字符列出為空白字符。
這就是StringUtils.isNotBlank(str)返回true原因,因為您的String具有非空白字符。 str.trim()刪除空格字符,因此不會碰到現有的str.trim()空格。

您可以通過手動創建帶有該字符的String來重現該字符串:

StringUtils.isNotBlank(new String(new byte[]{-96}));

要么

StringUtils.isNotBlank(new String(new byte[]{(byte) 160}));

兩種版本都會產生true

您可以在刪除所有空格后嘗試檢查字符串的長度:

String input = " ";
if (input != null && input.replaceAll("\\s+", "").length() > 0) {
    System.out.println("Not empty.");
}
else {
    System.out.println("Empty");
}

我提供了使用Apache庫的替代方法。 邏輯是非空字符串是任何不為null且其中至少包含一個非空白字符的字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM