guava翻譯系列之Joiner
基本的guava工具
在前面的章節,我們已經討論了什麼是GUAVA和怎樣去安裝GUAVA,在這一章我們將開始使用guava,我們將展示guava提供的基本功能,並且瞭解一下這些基本功能是怎樣幫助我們簡化日常工作遇到的的問題
在這一章節中,我們將覆蓋一下幾個方面的內容:
- 使用Joiner Class 將字串以指定的分隔符連線起來。 我們也會涉及到使用MapJoiner
- Splitter Class,和Joiner的作用相反,將一個字串以給定的分隔符分隔開
- 使用CharMatcher 和 Strings 類 完成一些基本的操作,比如 將String中的一部分移出,匹配String中的某一部分等等
- Preconditions Class 提供了一些方法去判斷引數,方法,變數是否和你的預期一樣
- 可以和任何一個java物件協作的一些基本的工具類,還有以比較方便的方式實現 Comparable 介面
使用Joiner 類
將一些普通的字串以固定的分隔符組裝在一起是我們在平常工作遇到的,比如將一個Array,List,iterable包含的內容組轉成字串,最常見的就是使用迴圈將字串拼接在StringBuilder上,一般的程式碼如下:
這段程式碼要注意的就是要將最後一個分隔符去掉。這段程式碼不是很複雜,但是沒有什麼價值,完全可以使用Joiner類實現。 下面是一個簡單的例子,使用Joiner類以 “|” 將字串分隔:
Joiner.on(“|”).skipNulls().join(StringList);
這段程式碼以簡潔明明瞭的方式實現字串分隔的功能,降低了程式碼出錯的概率。 如果你需要將List中的null值以一個特殊的值代替,那麼可以用下面的程式碼實現:
Joiner.on(“|”).userForNull(“no value”).join(stringList).
關於Joiner有如下幾點我們需要強調:
- Joiner Class不僅僅和String[]一起工作,還可以和array iterable,以及陣列物件,Joiner返回是迴圈Object.toString()方法。
- 如果沒有使用skipNulls或者userForNull 那麼出現Null時,會出現NullPointException
- Joiner Class是一個不變類,就像String一樣
`Joiner stringJoiner = Joiner.on(“|”).skipNulls();
//the useForNull() method returns a new instance
of the Joiner!
stringJoiner.useForNull(“missing”);
stringJoiner.join(“foo”,”bar”,null);`
在這個例子中,useForNull這個方法返回了一個新的Joiner物件,對原來的stringJoiner沒有任何影響,因此當執行這個例子的時候,最後一個null物件還是會被忽略,不會變成 missing.
- Joiner 類不僅僅會返回Strings,而且還能返回StringBuilder
`StringBuilder stringBuilder = new StringBuilder();
Joiner joiner = Joiner.on(“|”).skipNulls();
//returns the StringBuilder instance with the values foo,bar,baz
appeneded with “|” delimiters
joiner.appendTo(stringBuilder,”foo”,”bar”,”baz”)`
在這個例子中,我們傳遞了個一個StringBuilder的例項給Joiner Class,joiner.appedTo 會將 foo,bar,baz 以 “|”分隔,並將值給stringBuilder.
- Joiner 類可以和實現了Appendable的例項合作
`FileWriter fileWriter = new FileWriter(new File(“path”)):
List dateList = getDates();
Joiner joiner = Joiner.on(“#”).useForNulls(” “);
//returns the FileWriter instance with the values
appended into it
joiner.appendTo(fileWriter,dateList);`
這裡我們看到了一個和上面類似的例子,我們傳遞一個FileWriter的例項和一個包含了Date的list給Joiner 類,Joiner 類會將包含日期的list追加到FileWriter例項上。
從上面的例子中我們可以看到,Joiner類在處理一些基本任務是非常容易的,並且非常容易的。 在我們將目光離開Joiner類之前,我們來看一個特殊的類 MapJoiner,MapJoiner的使用方式和Joiner差不多,但是有一點不同的是: 他是將key/value以特地的分隔符分隔,建立一個MapJoiner類可以採用如下方式:mapJoiner = Joiner.on("#").withKeyValueSeparator("=");
讓我們快速的看一下這段程式碼做了什麼事:
- Joiner.on(“#”) 建立了一個Joiner 物件
- withKeyValueSeparator方法建立了一個MapJoiner物件
下面是一個例子展示MapJoiner的使用:
`@Test
public void testMapJoiner() {
//Using LinkedHashMap so that the original
order is preserved
String expectedString = “Washington D.C=Redskins#New York
City=Giants#Philadelphia=Eagles#Dallas=Cowboys”;
Map testMap = Maps.newLinkedHashMap();
testMap.put(“Washington D.C”,”Redskins”);
testMap.put(“New York City”,”Giants”);
testMap.put(“Philadelphia”,”Eagles”);
testMap.put(“Dallas”,”Cowboys”);
String returnedString = Joiner.on(“#”).
withKeyValueSeparator(“=”).join(testMap);
assertThat(returnedString,is(expectedString));
}`
回顧一下Joiner類的使用
前面的單元測試的例子中,我們使用Maps的一個靜態工廠類的newLinkedHashMap方法建立了一個LinkedHashMap. 這個方法可以在com.google.common.collect包中找到。 Joiner 類將map中的每個物件以”#”分隔. withKeyValueSeparator 返回MapJoiner類,將map裡面的key/value物件以”=”分隔。 最後我們使用Assert進行斷言。
相關文章
- guava翻譯系列之SplitterGuava
- guava之Joiner 和 SplitterGuava
- Guava 之 Joiner 和 SplitterGuava
- Guava翻譯之SmallFunctionGuavaFunction
- Guava文件翻譯之 Guava簡介Guava
- Guava文件翻譯之 ServiceGuava
- Guava文件翻譯之ListenableFutureGuava
- Guava字串處理Joiner、SplitterGuava字串
- Guava原始碼淺析——JoinerGuava原始碼
- (翻譯)Google Guava CacheGoGuava
- JAVA NIO 翻譯系列(七、FileChannel)Java
- StevGuo系列文章翻譯之Android系統屬性Android
- 《Web 推送通知》系列翻譯 | 引言&概覽Web
- 學php之翻譯wordpress(2)PHP
- LWN 文章翻譯 - 名字空間實作系列
- google guava集合之MultisetGoGuava
- 論機器翻譯之淺薄
- 深入理解Hystrix之文件翻譯
- Kafka之Purgatory Redesign Proposal (翻譯)Kafka
- Android基礎進階之EffectiveJava翻譯系列(第八章:異AndroidJava
- Spring系列(零) Spring Framework 文件中文翻譯SpringFramework
- [Java 8 Tutorial翻譯系列]Java forEach詳解Java
- LoadRunner函式中文翻譯系列之一--Action函式
- 翻譯
- Yurii談翻譯(五)怎樣翻譯更地道:so…that…的翻譯
- NServiceBus翻譯之Hosting(一):The NServiceBus Host
- Google guava原始碼之EventBusGoGuava原始碼
- 如何完成中文翻譯日文線上翻譯
- Yurii談翻譯(四)怎樣翻譯更地道:翻譯如鋪路
- Yurii談翻譯(九)怎樣翻譯更地道:冠詞a的翻譯
- Yurii談翻譯(十)怎樣翻譯更地道:最高階的翻譯
- 翻譯的未來:翻譯機器和譯後編譯編譯
- Ubuntu安裝劃詞翻譯軟體Goldendict 單詞翻譯 句子翻譯UbuntuGo
- Yurii談翻譯(六)怎樣翻譯更地道:“as somebody said…”的翻譯AI
- Yurii談翻譯(十三)怎樣翻譯更地道:It is…that…句型諺語的翻譯
- Yurii談翻譯(十四)怎樣翻譯更地道:否定句的翻譯
- 螞蟻金服宮孫:guava探究系列之優雅校驗資料Guava
- 蝴蝶書-task2: 文字推理、摘要、糾錯 transformers實現翻譯 OpenAI翻譯 PyDeepLX翻譯 DeepLpro翻譯ORMOpenAI