探索StringUtils3之StringUtils.isEmpty()和StringUtils.isBlank()的區別

Moshow鄭鍇發表於2020-04-07

也許你兩個都不知道,也許你除了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)
     */
    public static boolean isEmpty(final CharSequence cs) {
        return cs == null || cs.length() == 0;
    }

StringUtils.isNotEmpty()

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

public static boolean isNotEmpty(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
	/**
     * @param css  the CharSequences to check, may be null or empty
     * @return {@code true} if any of the CharSequences are empty or null
     * @since 3.2
     */
    public static boolean isAnyEmpty(final CharSequence... css) {
      if (ArrayUtils.isEmpty(css)) {
        return true;
      }
      for (final CharSequence cs : css){
        if (isEmpty(cs)) {
          return true;
        }
      }
      return false;
    }

StringUtils.isNoneEmpty()

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

    /**
     * <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
     */
    public static boolean isNoneEmpty(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
    /**
     * <p>Checks if a CharSequence is whitespace, empty ("") or null.</p>
     * @param cs  the CharSequence to check, may be null
     * @return {@code true} if the CharSequence is null, empty or whitespace
     * @since 2.0
     * @since 3.0 Changed signature from isBlank(String) to isBlank(CharSequence)
     */
    public static boolean isBlank(final CharSequence cs) {
        int strLen;
        if (cs == null || (strLen = cs.length()) == 0) {
            return true;
        }
        for (int i = 0; i < strLen; i++) {
            if (Character.isWhitespace(cs.charAt(i)) == false) {
                return false;
            }
        }
        return true;
    }

StringUtils.isNotBlank()

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

public static boolean isNotBlank(final CharSequence cs) {
        return !isBlank(cs);
    }

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
     */
    public static boolean isAnyBlank(final CharSequence... css) {
      if (ArrayUtils.isEmpty(css)) {
        return true;
      }
      for (final CharSequence cs : css){
        if (isBlank(cs)) {
          return true;
        }
      }
      return false;
    }

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
     */
    public static boolean isNoneBlank(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所需的更改次數

相關文章