當前位置: 妍妍網 > 碼農

isEmpty 和 isBlank 的用法區別,居然一半的人答不上來.....

2024-06-25碼農

大家好,我是鵬磊。

也許你兩個都不知道,也許你除了isEmpty/isNotEmpty/isNotBlank/isBlank外,並不知道還有 isAnyEmpty/isNoneEmpty/isAnyBlank/isNoneBlank 的存在, come on ,讓我們一起來探索 org.apache.commons.lang3.StringUtils; 這個工具類.

#isEmpty系列

StringUtils.isEmpty()

>>> 是否為空. 可以看到 " " 空格是會繞過這種空判斷,因為是一個 空格 ,並不是嚴格的 空值 ,會導致 isEmpty(" ")=false

  • StringUtils.isEmpty(null) = true

  • StringUtils.isEmpty("") = true

  • StringUtils.isEmpty(" ") = false

  • StringUtils.isEmpty(「bob」) = false

  • StringUtils.isEmpty(" bob ") = false

  • /**
    *
    * <p>NOTE: This method changed in Lang version 2.0.
    * It no longer trims the CharSequence.
    * That functionality is available in isBlank().</p>
    *
    @param cs the CharSequence to check, may be null
    @return {@code true} if the CharSequence is empty or null
    @since 3.0 Changed signature from isEmpty(String) to isEmpty(CharSequence)
    */

    publicstaticbooleanisEmpty(final CharSequence cs){
    return cs == null || cs.length() == 0;
    }

    StringUtils.isNotEmpty()

    >>> 相當於不為空 , = !isEmpty()

    publicstaticbooleanisNotEmpty(final CharSequence cs){
    return !isEmpty(cs);
    }

    StringUtils.isAnyEmpty()

    >>> 是否有一個為空, 只有一個為空,就為true .

  • StringUtils.isAnyEmpty(null) = true

  • StringUtils.isAnyEmpty(null, 「foo」) = true

  • StringUtils.isAnyEmpty("", 「bar」) = true

  • StringUtils.isAnyEmpty(「bob」, 「」) = true

  • StringUtils.isAnyEmpty(" bob ", null) = true

  • StringUtils.isAnyEmpty(" ", 「bar」) = false

  • StringUtils.isAnyEmpty(「foo」, 「bar」) = false

  • StringUtils.isNoneEmpty()

    >>> 相當於 !isAnyEmpty(css) , 必須所有的值都不為空才返回true

    如果你近期準備面試跳槽,建議在ddkk.com線上刷題,涵蓋 一萬+ 道 Java 面試題,幾乎覆蓋了所有主流技術面試題,還有市面上最全的技術五百套,精品系列教程,免費提供。

    /**
     * <p>Checks if none of the CharSequences are empty ("") or null.</p>
     *
     * <pre>
     * StringUtils.isNoneEmpty(null) = false
     * StringUtils.isNoneEmpty(null, "foo") = false
     * StringUtils.isNoneEmpty("", "bar") = false
     * StringUtils.isNoneEmpty("bob", "") = false
     * StringUtils.isNoneEmpty(" bob ", null) = false
     * StringUtils.isNoneEmpty(" ", "bar") = true
     * StringUtils.isNoneEmpty("foo", "bar") = true
     * </pre>
     *
     * @param css the CharSequences to check, may be null or empty
     * @return {@code true} if none of the CharSequences are empty or null
     * @since 3.2
     */

    publicstaticbooleanisNoneEmpty(final CharSequence... css){
    return !isAnyEmpty(css);
    }

    #isBank系列

    StringUtils.isBlank()

    >>> 是否為真空值(空格或者空值)

  • StringUtils.isBlank(null) = true

  • StringUtils.isBlank("") = true

  • StringUtils.isBlank(" ") = true

  • StringUtils.isBlank(「bob」) = false

  • StringUtils.isBlank(" bob ") = false

  • StringUtils.isNotBlank()

    >>> 是否真的不為空 ,不是空格或者空值 ,相當於 !isBlank();

    StringUtils.isAnyBlank()

    >>> 是否包含任何真空值 (包含空格或空值)

  • StringUtils.isAnyBlank(null) = true

  • StringUtils.isAnyBlank(null, 「foo」) = true

  • StringUtils.isAnyBlank(null, null) = true

  • StringUtils.isAnyBlank("", 「bar」) = true

  • StringUtils.isAnyBlank(「bob」, 「」) = true

  • StringUtils.isAnyBlank(" bob ", null) = true

  • StringUtils.isAnyBlank(" ", 「bar」) = true

  • StringUtils.isAnyBlank(「foo」, 「bar」) = false

  • /**
     * <p>Checks if any one of the CharSequences are blank ("") or null and not whitespace only..</p>
     * @param css the CharSequences to check, may be null or empty
     * @return {@code true} if any of the CharSequences are blank or null or whitespace only
     * @since 3.2
     */

    publicstaticbooleanisAnyBlank(final CharSequence... css){

    if (ArrayUtils.isEmpty(css)) {

    returntrue;
    }
    for (final CharSequence cs : css){

    if (isBlank(cs)) {

    returntrue;
    }
    }
    returnfalse;
    }


    StringUtils.isNoneBlank()

    >>> 是否全部都不包含空值或空格

  • StringUtils.isNoneBlank(null) = false

  • StringUtils.isNoneBlank(null, 「foo」) = false

  • StringUtils.isNoneBlank(null, null) = false

  • StringUtils.isNoneBlank("", 「bar」) = false

  • StringUtils.isNoneBlank(「bob」, 「」) = false

  • StringUtils.isNoneBlank(" bob ", null) = false

  • StringUtils.isNoneBlank(" ", 「bar」) = false

  • StringUtils.isNoneBlank(「foo」, 「bar」) = true

  • /**
     * <p>Checks if none of the CharSequences are blank ("") or null and whitespace only..</p>
     * @param css the CharSequences to check, may be null or empty
     * @return {@code true} if none of the CharSequences are blank or null or whitespace only
     * @since 3.2
     */

    publicstaticbooleanisNoneBlank(final CharSequence... css){

    return !isAnyBlank(css);
    }

    StringUtils的其他方法

    可以參考官方的文件,裏面有詳細的描述,有些方法還是很好用的.
    https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html

    方法名 英文解釋 中文解釋
    IsEmpty/IsBlank checks if a String contains text 檢查字串是否包含文本
    Trim/Strip removes leading and trailing whitespace 刪除前導和尾隨空格
    Equals/Compare compares two strings null-safe 比較兩個字串是否為null安全的
    startsWith check if a String starts with a prefix null-safe 檢查字串是否以字首null安全開頭
    endsWith check if a String ends with a suffix null-safe 檢查字串是否以字尾null安全結尾
    IndexOf/LastIndexOf/Contains null-safe index-of checks 包含空安全索引檢查
    IndexOfAny/LastIndexOfAny/IndexOfAnyBut/LastIndexOfAnyBut index-of any of a set of Strings 任意一組字串的索引
    ContainsOnly/ContainsNone/ContainsAny does String contains only/none/any of these characters 字串是否僅包含/無/這些字元中的任何一個
    Substring/Left/Right/Mid null-safe substring extractions 字串安全提取
    SubstringBefore/SubstringAfter/SubstringBetween substring extraction relative to other strings -相對其他字串的字串提取
    Split/Join splits a String into an array of substrings and vice versa 將字串拆分為子字串陣列,反之亦然
    Remove/Delete removes part of a String -刪除字串的一部份
    Replace/Overlay Searches a String and replaces one String with another 搜尋字串,然後用另一個字串替換
    Chomp/Chop removes the last part of a String 刪除字串的最後一部份
    AppendIfMissing appends a suffix to the end of the String if not present 如果不存在字尾,則在字串的末尾附加一個字尾
    PrependIfMissing prepends a prefix to the start of the String if not present 如果不存在字首,則在字串的開頭添加字首
    LeftPad/RightPad/Center/Repeat pads a String 填充字串
    UpperCase/LowerCase/SwapCase/Capitalize/Uncapitalize changes the case of a String 更改字串的大小寫
    CountMatches counts the number of occurrences of one String in another 計算一個字串在另一個字串中出現的次數
    IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintable checks the characters in a String 檢查字串中的字元
    DefaultString protects against a null input String 防止輸入字串為空
    Rotate rotate (circular shift) a String 旋轉(迴圈移位)字串
    Reverse/ReverseDelimited reverses a String -反轉字串
    Abbreviate abbreviates a string using ellipsis or another given String 使用省略號或另一個給定的String縮寫一個字串
    Difference compares Strings and reports on their differences 比較字串並報告其差異
    LevenshteinDistance the number of changes needed to change one String into another 將一個String轉換為另一個String所需的更改次數