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.pswp.cn/news/373350.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373350.shtml
英文地址,請注明出處:http://en.pswp.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…