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

相关推荐

  • 2021百度贴吧最新引流方法

    百度贴吧作为百度旗下的老牌产品权重非常高,基本上可以达到秒收录,所以我们发贴吧可以利用SEO的方法优化标题和baidu,例如笔者这篇文章就含有贴吧引流和精准引流等关键词。这里值得注意的是标题和文章要兼顾文章的可读性,给读者提供真正的价值不要做标题党。 百度贴吧引流的方法说来说去无非就是只有那么几个,你只要坚持去做,坚持去输出内容,贴吧很多时候也会有时候给你一定的惊喜的,下面我来分享下我是怎么做贴吧引流精准用户的 一,注册百度账号 首先我们先要准备一个贴吧号,还是老样子,关注目标的贴吧,然后签到,回复下里面的一些帖子,记得不要乱发广告,养号很重要,但不是让你随便去作,保持一个活跃度后要签到,然后吧内等级到了4级以后再去发帖,有人说最好在7级这样去发会比较稳,但我个人的经验来看,其实只要你的账号是正常注册的,资料各个完善好了的号,4级发也是一样的,只要不涉及规则的,都不会有问题的,所以这个没有一个很确切的说法,就是按照这样的去做就是的了。 二,发布这两类有效的帖子 1.原创的帖子 原创的帖子不会被系统屏蔽,并且收录的效果甚佳,如果一个帖子被发过很多贴吧了,很多网站了,那么收录的效果也不会多好,还会遭到系统的屏蔽过滤。 2.有图片的帖子 发布的帖子最好是有三张有吸引力的配图,只是干巴巴的文字是很难吸引人点击的,毕竟可视化的图片,才能吸引眼球。 三,内容发布 很多人不懂贴吧怎么去发,其实很简单,如果你担心会被秒了,那你可以按照我的这个方法去发,就是分段去发,这样盖楼,盖起来的也是会被收录,这样的文案虽然看起来没有整篇的那么顺但是一个很好的方法来的,因为我们做的文案并不是只为了吧内的流量,贴吧的文案是会被收录在搜索引擎的,所以不要觉得这个方法不好或者过不了你的那一关,我们换个角度去想,我们面对的是全网,并不是面对你一个人,所以方法好,不在乎多,直接执行就可以。

    2021年6月1日
    8
  • 家用打印机该怎么选?这款打印机让办公更多面

    可否认,无论是在公司办公还是在家办公,打印机都可以说是不可或缺的存在。的确,打印机作为重要的办公生产力工具,一直以来都深受办公人士的青睐。非典疫情成就了网购,那么新冠疫情则是打开了居家办公的大门。 想要更加从容的在家办公,一款好用的家用打印机该怎么选呢?要知道,我们之所以能够在公司从容不迫的工作,离不开的是那些强大而好用的打印机功能。如果有复印和扫描的需求,那么就需要一台三合一的多功能一体机。今天给大家带来的就是来普锐系列136wm黑白多功能一体机(以下简称为惠普136wm),这款打印机可以让居家办公变得更多面。 小机身,大功能 首先从功能上来看,惠普136wm是一款集打印、复印、扫描为一体的多功能一体机。所以说功能上惠普136wm更为全面,可以更加从容的应对打印、复印、扫描等任务。 同时还贴心的为用户设计了一键身份证复印功能,要知道对于新手用户而言,想要把身份证正反面两面复印在同一张纸上并不是一件轻松的事情,往往要经过很多次尝试调整后才能成功,而惠普136wm的一键身份证复印功能就可以轻松搞定。在操作上更是采用了经久耐用的按键设计,2行液晶显示屏搭配12个物理按键,让操作变得更加便捷。 看到这里,想必读者会有这样的疑问,这台惠普136wm功能如此齐全,那么体积会不会十分庞大?其实在很多消费者的固有思维中,功能越全面的打印机在机身尺寸上就不那么友好了。要知道,家庭环境不比办公室,能给打印机留出来的位置非常有限,这就对打印机的机身尺寸有了更高的要求。而惠普锐系列的136wm机身尺寸方面仅为406mm*359.6mm*253mm,让家庭用户彻底告别空间焦虑。搭配上高颜值的外观配色,与现代家居风格也会更加契合。 移动打印,让打印更多面 在现如今的办公环境中,无线办公和移动办公已经成为了办公的新趋势。搭配无线模块的惠普136wm让移动办公成为了可能,用户在操作时只需要将移动设备与惠普136wm连接,使用HP Smart智能应用就可以快捷的打印文档,并且还可以将文件直接扫描到手机终端,真正的从用户的需求出发,给办公带来了更多的便利。同时还能通过HP Smart智能应用对耗材余量进行实时监控,耗材的余量清晰可见。 同时在连接方式上,惠普136wm采用多种连接方式。不仅仅支持常规的USB连接,并且更为用户标配了无线网连接方式,让连接方式变得更加多元化,用户完全可以根据自身的需求选…

    2021年7月20日
    2
  • 网站采集内容变成原创的七个方法

    看到一篇文章:“在采集过程中完成,丝毫不影响采集速度,经过这样修改的文章可以把文章内容20%-30%的部分都变成其他内容,但不会把文章内容变得乱七八糟,而且丝毫不改变原文的内容的意思。 试想下如果一篇文章20%-30%的内容都不一样的话那就不是采集了,只能说相似,这样就大大降低了被K几率,一般的纯采集的站存活2-3个月80%会被K,经过这样修改做出来的站可以把被K几率降低到20%以下”此方法跟论策下面所谈的有所不同: 方法一:拆分法 把原有连续的文章,平均的截取成为2段3段或是更多。 好处:降低相似度、提高访问者浏览的速度、增加页面访问量 缺点:文章无法连续浏览,原有的一次性浏览变得繁琐,同时对Title标题的优化也有一定的不利,因为会有重复。不过数量较小的情况下不会有什么大碍。 方法二:跟随法 把每一个段落的结尾都增加一段话,可以是有情提示,小调查,或是其他文章的推荐。 好处:进一步降低相似度,给可以更多讯息,提供更多使用的功能。例如“回到最上面” 缺点:使用不当将降低用户体验,如果使用JAVASCEIPT等作有可能影响页面加载速度,干扰客户浏览主线。 方法三:标签法 在特定的关键字后增加友情注释。例如:我们所倡导的SEO(SEO相关信息)思想是。..。.. 好处:增加用户体验,让客户可以了解更多并不熟悉的专业名词,从而更好理解文章含义。 还可以自然的重复关键字,增加关键字密度。 缺点:如果使用过多,会造成页面信息繁乱,降低用户体验。增加页面体积,降低加载速度。干扰原有关键词布局和密度。 方法四:隐身法 将一些没有实际用处的词使用图片代替,经过优化的GIF图片只有十几个字节,将文章中出现的部分特定字或词进行隐身,也可以很好的达到降低页面相似度的效果。 优点:不干扰关键词布局、不干扰用户体验、不影响浏览和加载速度、有效防止被采集。 缺点:仅仅增加少许加载时间,但几乎可以省略不计。 方法五:规律性 如何让采集回来的文章尽快让搜索引擎收录呢?透过网站日志,我们可以看到蜘蛛爬行次数在某个时间点上 都有一个高峰,根据论策的观察,在上升期添加文章,在到达顶峰之后,快照就会被放出来。这样的高峰在曲线上不止一个,我们添加文章的时候,最好固定在某一个高峰前,这样,规律性强,蜘蛛也会有规律的来抓取。 方法六:版权法 在每篇文章的末尾加上免责声明:本文系转载自网络,如有侵犯,请联系我们…

    2021年5月31日
    6
  • 知乎的知+推广账户怎么开通?

    知+ 是知乎为企业和个人用户提供的涵盖「创作 – 分发 – 转化」的内容服务解决方案,以提升内容创作效率、加速内容曝光,助力用户通过优质内容获得更好的互动转化效果,实现商业增长。

    2021年5月2日
    4
  • 付费专栏怎么做好内容运营?用好这3点,你也能月入10w

    很多准备入行或刚入行新媒体的小伙伴们,往往会将内容运营作为工作的切入点,且刚进入公司时,上级一般也会让你先从内容运营着手。但很多人对内容运营的工作核心及流程并不熟悉,甚至有人将内容运营等同于文案编辑。

    2021年5月9日
    13
  • 分分钟赚钱项目,手游CPS暴利吸金

    CPS是时下媒体闷声赚钱的一个不错的方向,它不需要我们做太多的东西,只要是有一定的运营平台就行。 这段时间跟同事们一起聊天的时候,也聊到了CPS,大家都还基本认同我所说的,都认为是低门槛,只需要掌握一些方法,赚钱也不是梦想。 最近游戏行业很火热。宅在家里不是刷刷抖音,就是玩玩游戏。大多数的游戏推广都是我们看的那种为了注册量,一个个都喊着不充一分钱,还能赚元宝,不错,元宝肯定是有,但提不了现。 一般情况下,游戏开发公司会给这一类的cps提成,而且提成会很高,那我们就结合一下短视频自媒体,去仔细的想一下这个流程。 这种短视频自媒体的账号,都是零开始,有一定粉丝量后,他们就会在自己的作品里铺这类的广告,因数了有粉丝基数,他们会不断强调要玩什么游戏或者是买什么东西上什么平台,都是一个道里。 很多人都在从事这种行业,这也就成了自媒体游戏类CPS最简单快捷的变现套路。  至于原理就很简单了,我们只要主意项目的优化细节,你如果想赚钱,就一定要了解项目的赚钱模式是什么,什么靠注册量能赚钱,或者是升到多少级能提现的那些,都只是个噱头,只要为了吸引更多人去注册试玩而已。  如果你想操作游戏cps项目的话,那你就一定要把这类人群的定位搞清楚,他们无非是两种,一种是真的喜欢玩游戏的,不管是玩什么游戏都想争个酸甜的,为了就是享受那种高处不胜寒的感觉的人。  但大家也不要误会,这和有钱没钱关系不大,就算是没钱也有没钱的玩法,还有一种人,就比较天真一点,想要靠打怪升级掉装备来赚钱的。 但就是这种人或者是这一类的人群,是我们在做营销的时候,最容易被我们设计的人,因为他们天真,而且有着强烈的找金赚钱的梦。  只要是我们找准了人群,那我们就可以按着这个思路走下去了,找一款带打金掉装备福利的游戏,建个号,上去就花个几百块钱满世界刷喇叭,只要你说有福利,再加上你刷一喇叭的实力,一般的新手就会蜂拥而来。 这时候我们就需要建立几个QQ群,把这些人都拉到QQ群里,我们的公会也就形成了。之后我们所要做的,就是拿着这些人干什么啊,去找官方要福利,一般游戏只要你有这样的公会,官方都会给到不错的福利,而且还会给公会奖励,当然啦,什么礼包啊这些,拿到手马上分下去,要让你QQ群里的保持着热情。 之后我们要做的,就是在几天或十几天的中间,不断的用我们自己的话术,将会员们洗脑,尽可能的去制造升级慢啊,装备价值低之类的。  然后…

    2021年6月24日
    10

发表评论

您的电子邮箱地址不会被公开。