更新時間:2019-12-20 16:14:57 來源:動力節點 瀏覽2845次
Java 9中的JDK分為模塊。人們可以合理地期望有一個新的模塊用于正則表達式處理包和類。其實沒有。該模塊java.base是所有其他模塊默認依賴的默認模塊,因此導出的軟件包的類始終在Java應用程序中可用。正則表達式包java.util.regex由此模塊導出。這使得開發變得更簡單:如果我們要在代碼中使用正則表達式,則不需要明確地“要求”一個模塊。似乎正則表達式對于Java包含在基本模塊中是至關重要的。
正則表達式類
該包java.util.regex包含類
MatchResult
Matcher
Pattern 和
PatternSyntaxException
改變API的唯一類是Matcher。
班級比賽中的變化
該課程Matcher增加了五種新方法。其中四個是已經存在的方法的超載版本。這些是:
appendReplacement
appendTail
replaceAll
replaceFirst
results
前四個存在于早期版本中,只有參數類型的改變(畢竟是什么重載意味著)。
appendReplacement /尾
在的情況下,appendReplacement和appendTail唯一的區別是,該參數也可以是一個StringBuilder,而不僅僅是StringBuffer。考慮到StringBuilder在Java 1.5 中引入的東西,像13年前,沒有人應該說這是一個不小心的行為。
它雖然多么有趣的API JDK的當前網絡版文檔的行為appendReplacement進行StringBuilder論證。較舊的StringBuffer有爭議的方法明確表示替換字符串可能包含將被相應組替換的命名引用。該StringBuilderargumented版本錯過這個。該文檔似乎是復制/粘貼,然后編輯。該文本將“緩沖區”替換為“構建器”并且相似,并且將刪除指定的引用要素的文本。
我嘗試使用Java 9 build160的功能,這兩個方法版本的結果是一樣的。這不應該是一個驚喜,因為這兩個方法的源代碼是相同的,JDK中的一個簡單的復制/粘貼,除了參數類型。
似乎可以使用
@Test
注釋行或每一行上面的行。然而,文檔僅涉及編號的引用。
的replaceAll /第一
這也是一個“舊”方法,用一些新的字符串替換匹配的組。舊版本和新版本之間的唯一區別是如何提供替換字符串。在舊版本中,字符串是String在調用該方法之前計算的。在新版本中,字符串作為a Function。為每個匹配結果調用此函數,并且可以即時計算替換字符串。
知道這個課程Function是在3年前在Java 8中引入的,它在正則表達式中的新用法可能是一個小小的破折號。或者也許...可能我們應該看到這是十年后的一個提示,當課程Fuction將是13歲,我們還會有Java 9?
讓我們深入了解這兩種方法。(實際上只是replaceAll因為replaceFirst它是相同的,除了它只替換了第一個匹配的組。)我嘗試創建一些不是絕對復雜的例子,當這樣的使用可能是有價值的。
第一個示例來自JDK文檔:
@Test
它不是太復雜,顯示功能。使用lambda表達式是絕對足夠的。我不能想象一個更簡單的方法來大寫常量字符串文字“狗”。也許只寫“DOG”。好吧,我只是在開玩笑。但真的這個例子太簡單了。對于更復雜的文檔,文檔可能會使閱讀器與文檔化方法的功能分散。真的:不要指望在JavaDoc中不太復雜的例子。它描述了如何使用API,而不是為什么API被創建為一種設計的方式。
但是現在我們來看一些比較復雜的例子。我們要在字符串中替換#數字1,2,3等的字符。字符串包含編號的項目,如果我們在字符串中插入一個新的字符串,我們不想手動重新編號。有時我們分組兩個項目,在這種情況下我們寫##,然后我們只想跳過下一個序列號#。由于我們有一個單元測試,代碼比我可以把它描述得更好:
@Test
傳遞的lambda表達式replaceAll獲取計數器并計算下一個值。如果我們使用了一個,#那么如果我們使用兩個,那么它會增加1,那么它將兩個添加到計數器等等。因為lambda表達式不能改變周圍環境中變量的值(該變量必須是有效的最終),所以計數器不能是變量int或Integer變量。我們需要一個擁有int值的對象,并且可以被更改。AtomicInteger即使我們不使用它的原子特征也是如此。
下一個例子更進一步,并進行一些數學計算。它將字符串中的任何浮點格式的數字替換為其正弦值。這樣就可以糾正我們的判決,因為罪(pi)甚至不接近于pi,這在這里是不能精確表達的。它接近于零:
@Test
我們還將通過這個計算方式來演示我們列表中最后一個方法的演示,這是一個全新的Matcher類。
流結果()
新方法results()返回匹配結果的流。更準確地說它返回Stream的MatchResult對象。在下面的示例中,我們使用它從字符串中收集任何浮點格式的數字,并打印它們的正弦值逗號分隔:
@Test public void resultsTest(){
以上就是動力節點Java培訓機構小編介紹的“Java培訓教程:Java新的正則表達式功能”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
相關文章
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習