Apache Commons Lang StringUtils

因此,认为最好谈论我喜欢的另一个Java库。 它已经存在了一段时间,也许不是最令人兴奋的库,但是它非常有用。 我可能每天都使用它。

org.apache.commons.lang.StringUtils

StringUtils是Apache Commons Lang( http://commons.apache.org/lang/ )的一部分,顾名思义,它提供了一些不错的实用程序来处理String,这超出了java.lang.String所提供的功能。 它由50多种静态方法组成,我不会覆盖其中的每一个方法,而只是我最常使用的一些方法。

有两个不同的版本,较新的org.apache.commons.lang3.StringUtils和较旧的org.apache.commons.lang.StringUtils 。 两者之间确实没有任何显着差异。 lang3.StringUtils需要Java 5.0,可能是您要使用的版本。

公共静态布尔值equals(CharSequence str1,CharSequence str2)

以为我会从最直接的方法之一开始 等于 。 这完全符合您的期望,它接受两个String,如果相同则返回true,否则返回false。

但是java.lang.String已经有一个完美的equals方法吗? 我到底为什么要使用第三方实现?

这是一个公平的问题。 让我们看一些代码,您能看到任何问题吗?

public void doStuffWithString(String stringParam) {if(stringParam.equals("MyStringValue")) {// do stuff}
}

那是一个NullPointerException等待发生!

有两种解决方法:

public void safeDoStuffWithString1(String stringParam) {if(stringParam != null && stringParam.equals("MyStringValue")) {// do stuff}
}public void safeDoStuffWithString2(String stringParm) {if("MyStringValue".equals(stringParam)) {// do stuff}
}

我个人不喜欢这两种方法。 我认为null会检查污染代码,对我来说,“ MyStringValue” .equals(stringParam)的扫描效果不佳,它看起来是错误的。

这是StringUtils.equals派上用场的地方,它是null安全的。 不管您通过什么,都不会变成NullPointer! 因此,您可以按以下方式重写简单方法:

public void safeDoStuffWithString3(String stringParam) {if(StringUtils.equals(stringParam,"MyStringValue)) {// do stuff}
}

这是个人喜好,但我认为这比前两个示例更好。 它们没有什么问题,但我确实认为StringUtils.equals()值得考虑。

isEmpty,isNotEmpty,isBlank,isNotBlank


好吧,这些看起来很容易解释,我猜它们都是空安全的吗?

您可能在这里发现了一种模式。 isEmpty实际上是java.lang.String.isEmpty()的空安全替代品,而isNotEmpty是相反的。 因此,不再有null检查:

if(myString != null && !myString.isEmpty()) { // urghh// Do stuff with myString
}if(StringUtils.isNotEmpty(myString)) { // much nicer// Do stuff with myString
}

那么,为什么空白和空?

有所不同,如果String仅包含空格,则isBlank也返回true,即…

String someWhiteSpace = "    \t  \n";
StringUtils.isEmpty(someWhiteSpace); // false
StringUtils.isBlank(someWhiteSpace); // true

公共静态String [] split(String str,String spacerChars)

对,看起来就像String.split(),所以这只是内置Java方法的null安全版本吗?

好吧,是的,它当然是无效的。 尝试拆分null字符串将导致null,并且null分隔符将在空白处拆分。 但是还有另一个原因,您应该考虑使用StringUtils.split(…) ,这就是java.lang.String.split使用正则表达式作为分隔符的事实。 例如,以下可能无法满足您的要求:

public void possiblyNotWhatYouWant() {String contrivedExampleString = "one.two.three.four";String[] result = contrivedExampleString.split(".");System.out.println(result.length); // 0
}

但是我要做的就是在“。”前面加上两个反斜杠。 它将正常工作。 没什么大不了的吗?
也许不是,但是使用StringUtils.split的最后一个优势是,正则表达式很昂贵。 实际上,当我测试用逗号分割字符串时(根据我的经验, 是相当普遍的用例), StingUtils.split的运行速度快了四倍!

公共静态字符串连接(可迭代,字符串分隔符)

啊,终于有真正有用的东西了!

的确,我从来没有找到一种用分隔符将字符串连接起来的优雅方法,总有烦人的条件要求检查是否要插入分隔符。 因此,很高兴为我提供了一个实用程序。 这是一个简单的示例:

String[] numbers = {"one", "two", "three"};
StringUtils.join(numbers,",");  // returns "one,two,three"

还有各种采用Array和Iterators的重载版本。

好吧,我坚信。 这看起来像一个非常有用的库,它还能做什么?
相当多,但是就像我之前说的,我不会打扰所有可用的方法,最后我会重复API文档中的内容。 我真的建议您仔细看看: http : //commons.apache.org/lang/api-3.1/org/apache/commons/lang3/StringUtils.html

因此,基本上,如果您需要使用Java核心String库未涵盖的String(甚至可能包含的东西)做某事,请查看StringUtils。

参考:来自我们JCG合作伙伴的 Apache Commons Lang StringUtils   Tom 's编程博客上的 Tom Jefferys。


翻译自: https://www.javacodegeeks.com/2012/02/apache-commons-lang-stringutils.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JEE7:展望新时代

计划于2012年下半年发布的Java EE 7预计的JSR都已启动并正在运行。 Java EE 7发行版是日期驱动的,它将反映该行业迁移到云中时不断变化的需求:任何未准备就绪的内容将推迟到Java EE 8中使用 。 这是Java EE 7平台中不同规范的关键功能的更新和摘要。 1。…

Cocos2d-JS项目之UI界面的优化

测试环境: iphone4、iOS6.1.2、chrome 37.2062.60,Cocos2d-js 3.6 之前写了不少,实际项目也按这个去优化了,也有效果,但到最后才发现,尼玛,之前都搞错了,之所以有效果是歪打正着。。…

java数_java大数

java大数还是很好用的!基本加入:import java.math.BigInteger;import jave.math.BigDecimal;分别是大数和大浮点数。首先读入可以用:Scanner input new Scanner(System.in);BigInteger a input.nextBigInteger();这样读还是很方便的当然还有…

【Qt之Quick模块】6. QML语法详解_2类型系统

描述 在QML文档中对象层次结构的定义中可能使用的类型可以来自各种来源。它们可能是: 由QML语言原生提供通过QML模块通过c注册由QML模块作为QML文档提供 此外,应用程序开发人员可以通过直接注册c类型,或者通过在QML文档中定义可重用的组件(然后可以导…

JS显示当前时间(包含农历时间)

时间格式: JavaScript代码: var sWeek new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");var dNow new Date();var CalendarData new Arra…

Maven原型创建技巧

我最近需要为姜黄SOA项目创建一些Maven原型。 对于不了解的人来说, Maven原型是一种基于一些预先罐装的项目模板生成项目的方法。 对于当前的姜黄SOA原型,它将创建一个多模块Maven项目,该项目包含Interface和Service项目以及基本的WSDL和适当…

MyBatis操作指南-与Spring集成(基于注解)

转载于:https://www.cnblogs.com/weilu2/p/mybatis_spring_integration_basic_on_annotation.html

Windows mysql boost_Win7下Boost库的安装

Boost库是C领域公认的经过千锤百炼的知名C类库,涉及编程中的方方面面,简单记录一下使用时的安装过程1.boost库的下载boost库官网主页:www.boost.org2.安装将下载的压缩包解压到指定的目录3.建立编译工具bjam.exe在源码目录下执行bootstrap.ba…

5.2与终端进行对话

Linux提供了一个特殊的设备 /dev/tty ,该设备始终是指向当前终端或者当前的登录会话。 FILE* output fopen("/dev/tty", "w"); //向终端写入字符串 fprintf(output, "%s\n", "world"); FILE* input fopen("/dev/tty…

JVM:如何分析线程转储

本文将教您如何分析JVM线程转储,并查明问题的根本原因。 从我的角度来看,线程转储分析是掌握Java EE生产支持的任何个人最重要的技能。 您可以从线程转储快照中获取的信息量通常远远超出您的想象。 我的目标是与您分享我在过去10年中积累的有关线程转储分…

极光推送JPush的快速集成

首先到极光推送的官网上创建一个应用,填写对应的应用名和包名。 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置,然后要注意的是.so文件的放置位置: 在main目录下新建一个jniLibs文件夹,放在这个文件夹…

c遗传算法的终止条件一般_Matlab2 :Matlab遗传算法(GA)优4~-r-具箱是基于基本操作 联合开发网 - pudn.com...

Matlab2所属分类:matlab例程开发工具:PDF文件大小:115KB下载次数:76上传日期:2007-09-07 20:04:29上 传 者:钱广说明: :Matlab遗传算法(GA)优4~-r-具箱是基于基本操作及终止条件、二…

用程序输出表格

做应用程序的时候经常需要输出excel表格,除了不同语言接口完善程度不同的麻烦以及要添加各种外部引用的麻烦之外还要考虑应用环境不同的office版本的问题,实在麻烦 当只需要输出数据,不管颜色什么的的话,有个避免上述麻烦的办法就…

elk系列1之入门安装与基本操作

preface 我们每天都要查看服务器的日志,一方面是为了开发的同事翻找日志,另一方面是巡检服务器查看日志,而随着服务器数量以及越来越多的业务上线,日志越来越多,人肉运维相当痛苦了,此时,参考现…

Java 7 –反编译项目硬币

大家好,该是从2012年开始写作的时候了。正如您在其他博客中可能已经看到的那样,有一些更改可以使您使用Java编程时的开发人员生活变得更加轻松:Diamond运算符,Switchs中的Strings,尝试使用资源,多次捕获等 …

git安装后找不见版本_无法安装最新版本的Gitlab

这个问题不是代码,而是Gitlab的安装.我现在试图安装Gitlab几天没有成功.实际上,很久以前,他们提出了使用wget的方法非常好,但由于我们必须使用Curl的方法,所以不可能比下载更进一步.在Ubuntu 14.04机器上,以下命令有效:curl https://packages.gitlab.com/install/re…

在Excel表里面插入背景图

工作中我们会经常用到MS Excel,通常我们打开MS Excel,里面的工作表都是空白单调的背景。当然了,MS Excel可以在工作簿里面插入背景图片。那么问题来了,如果你没有安装Microsoft Office,该如何在Excel文件里面插入好看的…

Java 7:复制和移动文件和目录

这篇文章是我关于Java 7 java.nio.file软件包的系列文章的继续,这次涵盖了文件的复制和移动以及完整的目录树。 如果您曾经对Java缺少copy和move方法感到沮丧,那么请继续阅读,以免麻烦。 涵盖范围中包括非常有用的Files.walkFileTree方法。 但…

java 五子棋项目_Java项目如何实现五子棋小游戏

Java项目如何实现五子棋小游戏发布时间:2020-07-21 14:53:06来源:亿速云阅读:77作者:小猪小编这次要给大家分享的是Java项目如何实现五子棋小游戏,文章内容丰富,感兴趣的小伙伴可以来了解一下,希…

Java中多线程的使用!!

简介: 1.要了解多线程,首先我们得先了解进程和线程。那么什么是进程?进程就是一个正在运行的程序分配内存让应用程序能够运行的叫做进程。那么什么又是线程呢?线程:在一个程序中,负责代码的执行&#xff0c…