Guava字串處理Joiner、Splitter
Guava字串處理Joiner、Splitter
參考:https://blog.csdn.net/u012410733/article/details/51584086
https://www.cnblogs.com/whitewolf/p/4214749.html
https://blog.csdn.net/zbw18297786698/article/details/73223574
pom.xml
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency>
先介紹com.google.common.base.Joiner。我想做為一個程式設計師我們每天和String打交道的時候是會佔很多時間的吧。以任意的字串和與一些分隔符標記連線在一起也是我們工作中經常要遇到的問題。但是用Guava--Joiner,它會讓我們更加優雅的編碼。它通常涉及把一個陣列,列表,或者一個iterable和迴圈的內容,新增StringBuilder類專案,新增分隔符。先把Joiner的方法簡單的描述一下。
A<A extends Appendable> appendTo(A appendable, Iterable<?> parts)
用來存在放通過解析預先配置的分隔符後與Iterable型別parts解析後的字串
A <A extends Appendable> appendTo(A appendable, Iterator<?> parts)
用來存在放通過解析預先配置的分隔符後與Iterator型別parts解析後的字串
A <A extends Appendable> appendTo(A appendable, Object[] parts)
用來存在放通過解析預先配置的分隔符後與Object[]型別parts解析後的字串
A <A extends Appendable> appendTo(A appendable, Object first, Object second, Object... rest)
用來存在放通過解析預先配置的分隔符後與Object...型別parts解析後的字串
StringBuilder appendTo(StringBuilder builder, Iterable<?> parts)
用來存在放通過解析預先配置的分隔符後與Iterable型別parts解析後的字串
StringBuilder appendTo(StringBuilder builder, Iterator<?> parts)
用來存在放通過解析預先配置的分隔符後與Iterator型別parts解析後的字串
StringBuilder appendTo(StringBuilder builder, Object[] parts)
用來存在放通過解析預先配置的分隔符後與Object[]型別parts解析後的字串
StringBuilder appendTo(StringBuilder builder, Object first, Object second, Object... rest)
用來存在放通過解析預先配置的分隔符後與Object...型別parts解析後的字串
String join(Iterable<?> parts)
返回一個String在Iterable<?> parts每個資料中間新增上基於之前配置的分隔符
String join(Iterator<?> parts)
返回一個String在Iterator<?> parts每個資料中間新增上基於之前配置的分隔符
String join(Object[] parts)
返回一個String在Object[] parts每個資料中間新增上基於之前配置的分隔符
String join(Object first, Object second, Object... rest)
返回一個String在Object... parts每個資料中間新增上基於之前配置的分隔符
static Joiner on(char separator)
返回一個Joiner物件用來自己替換在連線的元素中char型別分隔符
static Joiner on(String separator)
返回一個Joiner物件用來自己替換在連線的元素中String型別分隔符
Joiner skipNulls()
返回一個Joiner物件但是會跳過連線元素中為null的元素
Joiner useForNull(String nullText)
返回一個Joiner物件但是會把為null的元素替換為String型別的nullText
Joiner.MapJoiner withKeyValueSeparator(String keyValueSeparator)
返回一個MapJoiner物件,用於新增到間隔Map中的Entity(而on()方法是替換key與value之間)。
是Splitter.withKeyValueSeparator()的逆運算。
首先我們來看看下面我們經常遇見的一個案例:
題目:
對於一個如下定義List
List<String> list = new ArrayList<String>("1", "2", null, “3”);
按照’,’分割,並過濾掉null。
如果不用第三方庫,如common-lange,Guava,用原生java,我們將怎麼繼續?
public static String join(List stringList, String delimiter) {
StringBuilder builder = new StringBuilder();
for (Object item : stringList) {
if (item != null) {
builder
.append(item)
.append(delimiter);
}
}
builder.setLength(builder.length() delimiter.length());
return builder.toString();
}
是不是很簡單,但是繁瑣,而且這裡還有個坑,我們使用append的方式,在每次for完成後,我們必須去修正remove最後的分隔符:builder.setLength(builder.length() - delimiter.length());
Guava版本呢?
public static String joinByGuava(List stringList, String delimiter) {
return Joiner
.on(delimiter)
.skipNulls()
.join(stringList);
}
我們不在考慮更多的細節,並且很有語義的告訴程式碼的閱讀者,用什麼分隔符,需要過濾null值再join。
Splitter
去除分隔結果為空格的資料,使用omitEmptyStrings
public static void main(String[] args) {
String str = "a,b, c,,d";
Iterable<String> result = Splitter.on(',')//設定分隔符
.omitEmptyStrings() //用於去除為空格的分割結果
.split(str); //要分割的字串
System.out.println("--start--");
for (String s : result) {
System.out.println(s);
}
System.out.println("--end--");
}
去除分隔結果的前後空格,trimResults()
public static void main(String[] args) {
String str = "a, b , c,,d";
Iterable<String> result = Splitter.on(',')//設定分隔符
.trimResults() //去除前後空格
.omitEmptyStrings() //用於去除為空格的分割結果
.split(str); //要分割的字串
System.out.println("--start--");
for (String s : result) {
System.out.println(s);
}
System.out.println("--end--");
}
使用Splitter方法把string轉換為list
public void createListFromString() {
String input = "apple - banana - orange";
List<String> result = Splitter.on("-")
.trimResults()
.splitToList(input);
for (String string : result) {
System.out.println(string);
}
}
其他方法:
trimResults(CharMatcher) 給定匹配器,移除結果字串的匹配字元
limit(int) 限制拆分出的字串數量
MapJoinner和MapSplitter
對於MapJoinner和MapSplitter的最好案例就是url的param編碼。
MapJoinner
題目:
生產一個查詢(id: 123,name: green)的學生資訊的url。
利用Guava的MapJoinner的程式碼如下:
Joiner.on("&").withKeyValueSeparator("=").join(ImmutableMap.of("id", "123", "name", "green"));
這裡採用了on傳入map item之間分隔符,以及withKeyValueSeparator傳遞map項key/value之間的分隔符。所以能夠很簡單的實現,不用我們在去實現一個的for迴圈程式碼。
利用Guava的MapSplitter的程式碼如下:
final Map<String, String> join = Splitter.on("&").withKeyValueSeparator("=").split("id=123&name=green");
這裡同樣利用on傳入字串的第一分隔符,withKeyValueSeparator傳入項的分隔符,產生map的key/value項,其結果是一個{id=123, name=green}的Map物件。
相關文章
- guava之Joiner 和 SplitterGuava
- Guava 之 Joiner 和 SplitterGuava
- Guava中的Joiner和SplitterGuava
- Guava原始碼淺析——JoinerGuava原始碼
- guava翻譯系列之JoinerGuava
- guava翻譯系列之SplitterGuava
- Java字串拼接寫法 joiner.onJava字串
- 字串處理字串
- awk 字串處理字串
- abap 字串處理字串
- windows批處理之一:字串處理Windows字串
- jstl處理字串JS字串
- javascript字串處理類JavaScript字串
- LoadRunner字串處理 - 補齊字串字串
- PHP 陣列 & 字串處理PHP陣列字串
- shell字串處理總結字串
- 簡單的字串處理字串
- SqlServer——字串處理函式SQLServer字串函式
- 字串的封送處理字串
- shell中字串的處理字串
- 安全字串處理函式字串函式
- GoldenGate COLMAP字串處理Go字串
- 處理字串的小程式字串
- bat 批處理字串操作BAT字串
- JavaScript常用的字串處理方法JavaScript字串
- MySQL 之動態字串處理MySql字串
- 第26章:高效字串處理字串
- sql對於字串的處理SQL字串
- php字串處理函式大全PHP字串函式
- PHP系列(五)PHP字串處理PHP字串
- 【轉載】SHELL字串處理技巧(${}、##、%%)字串
- SQL字串處理函式大全SQL字串函式
- 06.字元和字串處理字元字串
- 設計模式之釋出訂閱模式(4) Guava Eventbus 事件處理設計模式Guava事件
- Java入門教程四(字串處理)Java字串
- MySQL 動態字串處理詳解MySql字串
- 字串和日期時間的處理字串
- 處理字串的方法都在這裡字串