Apache Commons Lang StringUtils
org.apache.commons.lang.StringUtils
StringUtils是Apache Commons Lang( http://commons.apache.org/lang/ )的一部分,顧名思義,它提供了一些不錯(cuò)的實(shí)用程序來(lái)處理String,這超出了java.lang.String所提供的功能。 它由50多種靜態(tài)方法組成,我不會(huì)覆蓋其中的每一個(gè)方法,而只是我最常使用的一些方法。
有兩個(gè)不同的版本,較新的org.apache.commons.lang3.StringUtils和較舊的org.apache.commons.lang.StringUtils 。 兩者之間確實(shí)沒(méi)有任何顯著差異。 lang3.StringUtils需要Java 5.0,可能是您要使用的版本。
公共靜態(tài)布爾值equals(CharSequence str1,CharSequence str2)
以為我會(huì)從最直接的方法之一開(kāi)始。 等于 。 這完全符合您的期望,它接受兩個(gè)String,如果相同則返回true,否則返回false。
但是java.lang.String已經(jīng)有一個(gè)完美的equals方法嗎? 我到底為什么要使用第三方實(shí)現(xiàn)?
這是一個(gè)公平的問(wèn)題。 讓我們看一些代碼,您能看到任何問(wèn)題嗎?
public void doStuffWithString(String stringParam) {if(stringParam.equals("MyStringValue")) {// do stuff} }那是一個(gè)NullPointerException等待發(fā)生!
有兩種解決方法:
public void safeDoStuffWithString1(String stringParam) {if(stringParam != null && stringParam.equals("MyStringValue")) {// do stuff} }public void safeDoStuffWithString2(String stringParm) {if("MyStringValue".equals(stringParam)) {// do stuff} }我個(gè)人不喜歡這兩種方法。 我認(rèn)為null會(huì)檢查污染代碼,對(duì)我來(lái)說(shuō),“ MyStringValue” .equals(stringParam)的掃描效果不佳,它看起來(lái)是錯(cuò)誤的。
這是StringUtils.equals派上用場(chǎng)的地方,它是null安全的。 不管您通過(guò)什么,都不會(huì)變成NullPointer! 因此,您可以按以下方式重寫簡(jiǎn)單方法:
public void safeDoStuffWithString3(String stringParam) {if(StringUtils.equals(stringParam,"MyStringValue)) {// do stuff} }這是個(gè)人喜好,但我認(rèn)為這比前兩個(gè)示例更好。 它們沒(méi)有什么問(wèn)題,但我確實(shí)認(rèn)為StringUtils.equals()值得考慮。
isEmpty,isNotEmpty,isBlank,isNotBlank
好吧,這些看起來(lái)很容易解釋,我猜它們都是空安全的嗎?
您可能在這里發(fā)現(xiàn)了一種模式。 isEmpty實(shí)際上是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公共靜態(tài)String [] split(String str,String spacerChars)
對(duì),看起來(lái)就像String.split(),所以這只是內(nèi)置Java方法的null安全版本嗎?
好吧,是的,它當(dāng)然是無(wú)效的。 嘗試拆分null字符串將導(dǎo)致null,并且null分隔符將在空白處拆分。 但是還有另一個(gè)原因,您應(yīng)該考慮使用StringUtils.split(…) ,這就是java.lang.String.split使用正則表達(dá)式作為分隔符的事實(shí)。 例如,以下可能無(wú)法滿足您的要求:
public void possiblyNotWhatYouWant() {String contrivedExampleString = "one.two.three.four";String[] result = contrivedExampleString.split(".");System.out.println(result.length); // 0 } 但是我要做的就是在“。”前面加上兩個(gè)反斜杠。 它將正常工作。 沒(méi)什么大不了的嗎?
也許不是,但是使用StringUtils.split的最后一個(gè)優(yōu)勢(shì)是,正則表達(dá)式很昂貴。 實(shí)際上,當(dāng)我測(cè)試用逗號(hào)分割字符串時(shí)(根據(jù)我的經(jīng)驗(yàn), 這是相當(dāng)普遍的用例), StingUtils.split的運(yùn)行速度快了四倍!
公共靜態(tài)字符串連接(可迭代,字符串分隔符)
啊,終于有真正有用的東西了!
的確,我從來(lái)沒(méi)有找到一種用分隔符將字符串連接起來(lái)的優(yōu)雅方法,總有煩人的條件要求檢查是否要插入分隔符。 因此,很高興為我提供了一個(gè)實(shí)用程序。 這是一個(gè)簡(jiǎn)單的示例:
String[] numbers = {"one", "two", "three"}; StringUtils.join(numbers,","); // returns "one,two,three"還有各種采用Array和Iterators的重載版本。
好吧,我堅(jiān)信。 這看起來(lái)像一個(gè)非常有用的庫(kù),它還能做什么?
相當(dāng)多,但是就像我之前說(shuō)的,我不會(huì)打擾所有可用的方法,最后我會(huì)重復(fù)API文檔中的內(nèi)容。 我真的建議您仔細(xì)看看: http : //commons.apache.org/lang/api-3.1/org/apache/commons/lang3/StringUtils.html
因此,基本上,如果您需要使用Java核心String庫(kù)未涵蓋的String(甚至可能包含的東西)做某事,請(qǐng)查看StringUtils。
參考:來(lái)自我們JCG合作伙伴的 Apache Commons Lang StringUtils ? Tom 's編程博客上的 Tom Jefferys。
翻譯自: https://www.javacodegeeks.com/2012/02/apache-commons-lang-stringutils.html
總結(jié)
以上是生活随笔為你收集整理的Apache Commons Lang StringUtils的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 朝朝盈是招行自己的吗?
- 下一篇: JEE7:展望新时代