轉自https://www.iteye.com/blog/jackyrong-2157324
guava庫中,包含了很好的join和split的功能,例子如下:
1) 將LIST轉換爲使用字符串連接的字符串
Java代碼
- List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom");
- String result = Joiner.on(",").join(names);
- assertEquals(result, "John,Jane,Adam,Tom");
2)使用joiner把MAP轉成STRING
Java代碼
- @Test
- public void whenConvertMapToString_thenConverted() {
- Map<String, Integer> salary = Maps.newHashMap();
- salary.put("John", 1000);
- salary.put("Jane", 1500);
- String result = Joiner.on(" , ").withKeyValueSeparator(" = ")
- .join(salary);
- assertThat(result, containsString("John = 1000"));
- assertThat(result, containsString("Jane = 1500"));
- }
3 將嵌套的collection join起來
Java代碼
- @Test
- public void whenJoinNestedCollections_thenJoined() {
- List<ArrayList<String>> nested = Lists.newArrayList(
- Lists.newArrayList("apple", "banana", "orange"),
- Lists.newArrayList("cat", "dog", "bird"),
- Lists.newArrayList("John", "Jane", "Adam"));
- String result = Joiner.on(";").join(Iterables.transform(nested,
- new Function<List<String>, String>() {
- @Override
- public String apply(List<String> input) {
- return Joiner.on("-").join(input);
- }
- }));
- assertThat(result, containsString("apple-banana-orange"));
- assertThat(result, containsString("cat-dog-bird"));
- assertThat(result, containsString("apple-banana-orange"));
- }
4 當使用joiner時候處理null值
有幾個對付NULL值的方法,第一個是skipNulls().
Java代碼
- @Test
- public void whenConvertListToStringAndSkipNull_thenConverted() {
- List<String> names = Lists.newArrayList("John", null, "Jane", "Adam", "Tom");
- String result = Joiner.on(",").skipNulls().join(names);
- assertEquals(result, "John,Jane,Adam,Tom");
- }
或者乾脆將null值換掉,就是:
Java代碼
- @Test
- public void whenUseForNull_thenUsed() {
- List<String> names = Lists.newArrayList("John", null, "Jane", "Adam", "Tom");
- String result = Joiner.on(",").useForNull("nameless").join(names);
- assertEquals(result, "John,nameless,Jane,Adam,Tom");
- }
5 使用splitter方法把string轉換爲list
Java代碼
- @Test
- public void whenCreateListFromString_thenCreated() {
- String input = "apple - banana - orange";
- List<String> result = Splitter.on("-").trimResults()
- .splitToList(input);
- assertThat(result, contains("apple", "banana", "orange"));
- }
6 使用splitter將string轉爲map
Java代碼
- @Test
- public void whenCreateMapFromString_thenCreated() {
- String input = "John=first,Adam=second";
- Map<String, String> result = Splitter.on(",")
- .withKeyValueSeparator("=")
- .split(input);
- assertEquals("first", result.get("John"));
- assertEquals("second", result.get("Adam"));
- }
7 guava還支持使用多個分隔符來分割字符,比如
Java代碼
- @Test
- public void whenSplitStringOnMultipleSeparator_thenSplit() {
- String input = "apple.banana,,orange,,.";
- List<String> result = Splitter.onPattern("[.|,]")
- .omitEmptyStrings()
- .splitToList(input);
- assertThat(result, contains("apple", "banana", "orange"));
- }
8 每隔多少個字符進行分隔
Java代碼
- @Test
- public void whenSplitStringOnSpecificLength_thenSplit() {
- String input = "Hello world";
- List<String> result = Splitter.fixedLength(3).splitToList(input);
- assertThat(result, contains("Hel", "lo ", "wor", "ld"));
- }
9 還可以讓splitter在分割多少個字符後停止分隔,比如
Java代碼
- @Test
- public void whenLimitSplitting_thenLimited() {
- String input = "a,b,c,d,e";
- List<String> result = Splitter.on(",")
- .limit(4)
- .splitToList(input);
- assertEquals(4, result.size());
- assertThat(result, contains("a", "b", "c", "d,e"));
- }