isEmpty 和 isBlank 请别乱用了,小心把服务器搞崩

开发中经常有些小细节容易忽略,这些小细节往往容易导致代码缺陷,今天分享一波工具类的小细节

也许你两个都不知道,也许你除了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) {

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/IsBlankchecks if a String contains text检查字符串是否包含文本Trim/Stripremoves leading and trailing whitespace删除前导和尾随空格Equals/Comparecompares two strings null-safe比较两个字符串是否为null安全的startsWithcheck if a String starts with a prefix null-safe检查字符串是否以前缀null安全开头endsWithcheck if a String ends with a suffix null-safe检查字符串是否以后缀null安全结尾IndexOf/LastIndexOf/Containsnull-safe index-of checks包含空安全索引检查IndexOfAny/LastIndexOfAny/IndexOfAnyBut/LastIndexOfAnyButindex-of any of a set of Strings任意一组字符串的索引ContainsOnly/ContainsNone/ContainsAnydoes String contains only/none/any of these characters字符串是否仅包含/无/这些字符中的任何一个Substring/Left/Right/Midnull-safe substring extractions字符串安全提取SubstringBefore/SubstringAfter/SubstringBetweensubstring extraction relative to other strings -相对其他字符串的字符串提取
Split/Joinsplits a String into an array of substrings and vice versa将字符串拆分为子字符串数组,反之亦然Remove/Deleteremoves part of a String -删除字符串的一部分
Replace/OverlaySearches a String and replaces one String with another搜索字符串,然后用另一个字符串替换Chomp/Chopremoves the last part of a String删除字符串的最后一部分AppendIfMissingappends a suffix to the end of the String if not present如果不存在后缀,则在字符串的末尾附加一个后缀PrependIfMissingprepends a prefix to the start of the String if not present如果不存在前缀,则在字符串的开头添加前缀LeftPad/RightPad/Center/Repeatpads a String填充字符串UpperCase/LowerCase/SwapCase/Capitalize/Uncapitalizechanges the case of a String更改字符串的大小写CountMatchescounts the number of occurrences of one String in another计算一个字符串在另一个字符串中出现的次数IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintablechecks the characters in a String检查字符串中的字符DefaultStringprotects against a null input String防止输入字符串为空Rotaterotate (circular shift) a String旋转(循环移位)字符串Reverse/ReverseDelimitedreverses a String -反转字符串
Abbreviateabbreviates a string using ellipsis or another given String使用省略号或另一个给定的String缩写一个字符串Differencecompares Strings and reports on their differences比较字符串并报告其差异LevenshteinDistancethe number of changes needed to change one String into another将一个String转换为另一个String所需的更改次数
本文链接:https://www.dzdvip.com/34960.html 版权声明:本文内容均来源于互联网。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 395045033@qq.com,一经查实,本站将立刻删除。
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年7月15日 23:11
下一篇 2022年7月15日 23:36

相关推荐

  • SEO初选完整的学习内容

    前言 过去我在SEO领域写了非常多的专栏以及文章,我想今年是时候做个大整理来帮助所有的读者以及学生更有效的学习SEO,因此建立了这个 SEO学习中心。未来也会持续地维护这个学习中心的内容,只要 SEO有新的变动我都会上来更新整理。 我把SEO是甚麽、怎麽学习、学习的关键知识、资源、还有我所有的文章都做了系统性的统整,基本上你只要看完此页上所有的步骤以及资源,绝对可以有效的理解完整的SEO观念。 备注:底下有些关键知识我还没有写完,预计会在未来陆续完成。 SEO是甚麼?為什麼重要? SEO是甚麽意思呢?SEO的全名为搜寻引擎优化(Search Engine Optimization),是一种利用搜寻引擎来帮助企业获利的网站优化概念与技术,是现在数位行销最重要的网站优化工作之一。因为人们对搜寻引擎的依赖,企业开始利用搜寻引擎来曝光自己的品牌以及网站,实际上如果你希望自己的网站能在Google搜寻结果上曝光有两种主要方法,第一种是透过『关键字广告』出现在广告版位,第二种便是让你的网站被Google演算法认定为优质的、对使用者有帮助的网站,Google就会把你的网站排序在Google的自然搜寻结果,使你的网站被Google搜寻引擎认可的过程,就是我们所谓『SEO搜寻引擎优化』的重要工作之一。 Google只會把"Google認為優質的、好的網站排序到搜尋結果裡面,而SEO最重要的其中一項工作使命便是"透過對網站的優化,讓你的網站被Goolge認為是優質的、值得被搜尋到的網站,並且被Google排序到搜尋結果上面",藉此在搜尋結果上獲得免費的曝光。 至于SEO为什么重要?根据SimilarWeb的统计,台湾的Google在2020年时每个月已经有超过1亿的浏览访次(Visit),也就是说每年发生了超过12亿的搜寻次数出现在台湾的Google上面,现代人不论是工作上遇到问题、有疑问想查询、头痛不舒服、假日不知道去哪间餐厅吃饭,这些问题都会依赖Google,因为人们对于Google有高度的依赖性,导致"搜寻行销"的背后藏著很大的市场商机。 除了"搜寻"的市场很大之外,SEO搜寻引擎优化这东西还有很多的好处,包括: 不像其他广告手段需要长期地投入广告预算才能获得曝光,SEO的曝光通常都是长期有效的,只要你被Google排序到搜寻结果页上,通常不会在短期内被Google下架。 可精准…

    2021年7月1日
    20
  • 搭建一个网站要多少钱?

    这是很多人在准备建网站前首先关注的问题,网站有很多种类型,比如有定制网站、半定制网站、模板网站,又分为展示型和功能型。例如定制网站的费用在1W-100W,一次性收费即可,后续要进行网站维护,则再收取维护的费用;模板网站的费用在1W以内,如果你继续使用该模板网站,每年还要进行续费。每个人建站的需求有所不同,报价也会有较大差别。     可以让你明确了解的是,网站费用的产生主要在这三个方面: 第一是前期准备,网站建设需要做好前期准备,包括域名注册、服务器选择以及资料调查等,其中可能涉及到一些零散的费用。   域名是非常重要的,每一个域名都是独一的,所以企业网站建设必须要先购买域名,域名的种类有很多,比如:com、cn、net等等,不同类型的域名价格是不一样的,域名的选择是要利于后期的优化与推广,选择的时候要慎重。   选好了网站的域名,接下来需要一个稳定的空间,因为空间会直接影响到访问速度、打开速度,一旦速度慢就会影响到用户体验与蜘蛛抓取,同时,如果空间过小,储存的数据也有限,所以一定要选择适合企业发展的空间,选择知名空间服务商。   第二是策划设计方案,如果要制作一个优质的网站,那么在这块的费用占比最大,整个网站的策划与设计费用,具体看你对网站的需求,或者是否还有其他功能需求等都会影响价格。     第三是前后端开发的费用,这方面的费用的占比同样比较大,如果有特殊的功能需求,还会再往上升。其中网站开发的流程包括了需求分析、前端开发、后端、测试、上线、后期维护等。   网站建设好后还需要不断的优化维护,所以,一个网站建设需要多少钱,是没有一个准确数据的。可以这么说吧,大约从几百块钱到几千块钱、到一两万块钱都是可以的,无非就是看售后能否配合你进行网站的二次修改、网站的图片、文字完善等,大家可以依自已的情况而定。   建议你在选择建站公司之前,首先考虑清楚自己的需求之后再做决定,明确自己想要一个什么样的网站。不过,抛开每个网站不同的侧重点来说,不管是谁都想让访客多在自己的网站停留下脚步,让自己的网站跳出率不那么高,这也是判断一个网站是否优质的重要因素。   以上的一些建议和经验总结,希望对大家在选择网站建设公司的时候有所帮助。

    2021年8月8日
    24
  • 农村宅基地新规(关于农村宅基地的最新政策)

    “农村宅基地新政策有:开展农村土地征收、集体经营性建设用地入市、宅基地制度改革试点;深化农村土地承包经营制度改革;健全耕地保护和补偿制度。坚守土地公有性质不改变、耕地红线不突破、农民利益不受损“三条底线”,防止犯颠覆性错误 每次新规的出台,都意味着新变化的到来。 9月1日起,修订后的《中华人民共和国土地管理法实施条例》(简称《条例》)将正式施行。 该《条例》聚焦耕地保护、土地征收、集体经营性建设用地等重点问题,尤其需要注意的是,修订后的《条例》第三十三条至第三十六条对宅基地管理的问题作了相关规定,并新增了一些关于宅基地保护的条款;第六十三条对侵犯村民宅基地权益作了相关的法律责任规定。 这也意味着该《条例》的落地实施将对宅基地的管理产生一定的影响。 修订后的《条例》对宅基地的管理明确规定了4个禁止,即禁止违背农村村民意愿强制流转宅基地;禁止违法收回农村村民依法取得的宅基地;禁止以退出宅基地作为农村村民进城落户的条件;禁止强迫农村村民搬迁退出宅基地。 在实务中,某些地方政府或企业为了推进合村并村、撤村并镇等进程,会使用“一户一宅”、“户口是否为农村性质”等理由强行要求农民进行宅基地流转,最终导致村民合法利益受损的现象。 从该《条例》可知,村民只要是通过合法程序获得的宅基地就受到法律的保护,地方政府、企业、村委会无权强制要求村民进行宅基地流转。 同时,宅基地上建设的房屋属于私有财产,不管村民是何种户口性质,其都拥有合法继承宅基地的权利。若农民子女仍属于农村户口无论是否使用宅基地或者宅基地上房屋是否存在都不影响其对房屋的合法继承权。即使子女进城安家,其同样可以享有宅基地上房屋的财产权。 当然,国家是允许进城落户的农村村民依法自愿有偿退出宅基地。乡(镇)政府和农村集体经济组织、村民委员会等应当将退出的宅基地优先用于保障该农村集体经济组织成员的宅基地需求。 由此可见,该《条例》在宅基地的管理方面赋予了村民相对地权利,但这并不意味着村民对宅基地拥有绝对地支配权。 近年来由于农村人口的外流,农村出现了大量地闲置宅基地与房屋。为了盘活利用闲置宅基地和房屋,两年前中央农村工作领导小组办公室、农业农村部曾联合印发《关于进一步加强农村宅基地管理的通知》(简称《通知》)。通知指出,在农村的宅基地整治工作开展后,4类房屋可能面临着被拆除的风险。 1、违法建造的房屋。根据《土地管理法》规定,未经…

    2022年8月29日
    22
  • 飞书钉钉企业微信哪个好用(钉钉、飞书、企微,办公软件的三国之争)

    如今,市面上相对常见的办公软件,即企微、钉钉、飞书三款,而这几款办公软件的功能定位、设计风格、产品切入点,甚至未来发展方向等方面都有所差异。具体如何看待?不妨来看看作者的解读。 在疫情之下成长起来的办公软件,如今也逐渐形成“三国鼎立”之势。钉钉、飞书、企微三家的定位有何不同?又各有什么优势?未来又将如何“排兵布阵”呢?本文以对此进行了分析,一起来看看吧。 从团队规模和产品规模来看。截止2021年10月,企微团队约700人,飞书团队达到5000人,钉钉团队约2000人。根据QuestMobile数据(2021年10月)月活跃用户企微8889万,飞书460万,钉钉最多达到了1.96亿。3个月已经过去了,上面的数据应该不止这些。可以预见在未来,飞书的产品规模增长潜力巨大。 一、三个功能关键词 想要了解一个人,我们可以先从看他的简历入手。相同的,想了解一个产品,我们可以从官方介绍入手。打开App store分别搜索三款产品,我们可以看到三家产品对自己的描述。核心信息我列到下面。 1. 企微的关键词:连接 企业微信,是腾讯微信团队为企业打造的企业通讯与办公工具。与微信一致的沟通体验,全方位连接微信,助力企业高效沟通与管理。 熟悉的沟通体验,和同事一起高效聊工作。【和微信一样易用】 全方位连接微信。【消息互通】【客户联系】【客户群】【客户朋友圈】 集成多款效率工具和办公应用。【会议】【微文档】【企业邮箱】【日程】【微盘】 2. 飞书的关键词:协同 飞书,定义先进团队的工作方式。一站式无缝办公协作,团队上下对齐目标,全面激活组织和个人。飞书 5.0,让组织发展更敏捷,业务流转更高效,个体协作更愉悦。 定义下一代工作方式。高效开会用“飞阅会”,全员协作用飞书文档,目标落地用飞书OKR。 一站式无缝协作体验。飞书“无缝打通”即时沟通、视频会议、日历、云文档、 OKR等强大功能与开放应用,彻底告别零散的多套系统和割裂的协作体验! 愉悦是一种生产力。文档点赞,让创作者被认可。表情回复,让鼓励无处不在百变个人状态,自定义导航栏顺序。 3. 钉钉的关键词:管理 钉钉,是阿里巴巴集团打造的一个企业级协同办公和应用开发平台,帮助数千万企业降低沟通、协同、管理成本,提升办公效率,实现组织数字化和业务数字化,帮助未来组织释放数字生产力。 提供专注、高效、安全的即时通讯解决方案,【DING一下,使命必…

    2022年2月12日
    194
  • 抖音小店是什么?

    抖音小店是为品牌方、商家等提供的电商平台,是抖音内部的电商变现工具,小店商品是直接在抖音完成交易的,不需要跳转至第三方,可以减少用户流失率。

    2021年5月16日
    10
  • 亚马逊运营主要做什么(月入2W+的亚马逊运营每天工作内容)

    一位刚入职不久的亚马逊运营给我留言说,每天关注看完销售额、销量、开完广告和优惠券,优化好链接,就没有什么事情可做了。 看着大家繁忙的样子,他觉得自己有点无所事事,但是又不知道该干什么。难道亚马逊运营每天真的这么清闲吗?今天就来给大家解密下优秀运营每天都在干什么。 01 首要事件 (1)关注后台业绩通知、买家消息、后台通知邮箱重要邮件 ①后台绩效通知,亚马逊重要的通知都是通过绩效告知我们的,比如说A to Z 、知识产权侵权、链接下架、类目审核、测评警告、封店邮件等都是通过绩效通知的。 ②买家消息要在24小时内回复,超时会影响我们的绩效考核,同时也给客户留下不良印象,引发差评和退货。对于一些要求测评的、非订单客户的、无效的买家消息标记为无需回复即可。 ③关注后台通知邮箱。有时候有些违规可能后台绩效通知会比较迟缓,但是绩效通知的消息亚马逊都会通过邮件发给我们。所以,每天上班就要去查看后台的邮箱,每天下班前还要再去查看一次,避免错过重要邮件。同时还要关注垃圾箱,有的亚马逊邮件可能会被邮件系统给放到垃圾箱内。 (2)关注各个链接的销量和销售额 查看今天的销量和昨天相比是否接近。销量减少比较多的抓紧时间去看是否是广告异常、链接被下架、差评导致的,并及时去解决处理。 (3)重点关注参与大促的链接表现情况 我们所说的大促指的是Prime day 、黑五网一大促、DOTD/Top Deal ,Best Deal、Lighting Deal 。 在这些大促开始之前我们要制定大促计划表。我们的单量目标、关键词排名、类目排名目标; 为了达到这个目标,我们每天需要做些什么,是大额优惠券、会员专项折扣、还是社交媒体促销、站外放量 ;在操作过程中出现偏差,该如何修正? 检查我们的单量是否达到我们预期单量、大促专属页面排位情况否靠前,比较靠后还要借助自动广告在促销页面打出广告位去增加单量。重点关注广告表现、核心关键词排名变动情况。 02 关注链接 (1)新品链接 要制定新品推广计划表。最好是从第1天到第30天的推广计划表,每天需要干什么,什么时候去优化链接、Vine计划什么时候去开;QA什么时候上,一天上几个; 亚马逊三大广告体系各个广告类型什么时候开,是先打大词,还是打长尾词,或者是只打自动? 预算每天怎么加, 什么时候去减预算;核心关键词打算什么时候上首页,每天去做些什么才能达到这个目标? …

    2022年3月30日
    62