当前位置: 欣欣网 > 码农

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所需的更改次数