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原始碼淺析——JoinerGuava原始碼
- Java字串拼接寫法 joiner.onJava字串
- 字串處理字串
- PHP 陣列 & 字串處理PHP陣列字串
- bat 批處理字串操作BAT字串
- 簡單的字串處理字串
- shell字串處理總結字串
- JavaScript常用的字串處理方法JavaScript字串
- 06.字元和字串處理字元字串
- 實用處理字串的linux命令字串Linux
- 處理stdin輸入的字串指令字串
- Java入門教程四(字串處理)Java字串
- C語言之字串處理函式C語言字串函式
- 處理字串的方法都在這裡字串
- MySQL 動態字串處理詳解MySql字串
- Linux 使用 shell 指令碼處理字串Linux指令碼字串
- 字串和日期時間的處理字串
- 設計模式之釋出訂閱模式(4) Guava Eventbus 事件處理設計模式Guava事件
- Java基礎-處理json字串解析案例JavaJSON字串
- JavaScript字串和時間處理隨筆JavaScript字串
- C++中的字串編碼處理C++字串編碼
- Python武器庫 - 科研中常用的python字串處理 - 字串擴充Python字串
- 處理一串字串的關鍵字字串
- 精通Python自然語言處理 1 :字串操作Python自然語言處理字串
- Java 運算子詳解與字串處理技巧Java字串
- Laravel response 返回的值全部處理為字串Laravel字串
- 藍橋杯 航班時間 (字串處理)C字串
- MVC字串處理及MVC@RenderSection小計MVC字串
- Java SimpleDateFormat處理日期與字串的轉換JavaORM字串
- 字串處理,push pop路徑,組合命令字串
- Golang語言包-字串處理strings和字串型別轉換strconvGolang字串型別
- guava之ImmutableMap使用例項及好處Guava
- SQL中的常用的字串處理函式大全SQL字串函式
- 一個專業處理字串的IDEA外掛字串Idea
- f-strings: Python字串處理的瑞士軍刀Python字串
- 寫個批處理指令碼來幫忙幹活---遍歷資料夾&字串處理指令碼字串
- L1-039 古風排版 (20分)【字串處理】字串