Google Guava學習筆記——基礎工具類Joiner的使用

  Guava 中有一些基礎的工具類,如下所列:

  1,Joiner 類:根據給定的分隔符把字符串連接到一起。MapJoiner 執行相同的操作,但是針對 Map 的 key 和 value。

  2,Splitter 類:與 Joiner 操作相反的類,是根據給定的分隔符,把一個字符串分隔成若個子字符串。

  3,CharMatcher,Strings 類:對字符串通用的操作,例如移除字符串的某一部分,字符串匹配等等操作。

  4,其他類:針對Object操作的方法,例如 toString 和 hashCode 方法等。

?

  使用 Joiner 類

  我們通常根據指定的分隔符來連接字符串是這樣做的。

 1 public String buildString(List<String> stringList, String delimiter){
 2         StringBuilder builder = new StringBuilder();
 3         for (String s : stringList) {
 4              if(s != null){
 5                   builder.append(s).append(delimiter);
 6             }
 7         }
 8         builder.setLength(builder.length() – delimiter.length());
 9         return builder.toString();
10 }

  上面的代碼注意的一點就是我們要移除字符串最后的一個分隔符。雖然不難,但是很無聊,下面用 Joiner 類來實現同樣的功能:

    

Joiner.on("|").skipNulls().join(stringList); // 默認使用“|”作為分隔符

  是不是很簡潔,如果你想替換為 null 的字符串,使用下面的方法:

Joiner.on("|").useForNull("no value").join(stringList);

  需要注意的是,Joiner 不僅可以操作字符串,還可以是數組,迭代器,可變參數。Joiner 類是不可變類,因此是線程安全的,它可以處理 static final 的變量,考慮到這一點,我們看下面的代碼:

 Joiner stringJoiner = Joiner.on("|").skipNulls();//the useForNull() method returns a new instance of the Joiner!stringJoiner.useForNull("missing");stringJoiner.join("foo","bar",null);

  在上面的代碼中,useForNull()方法沒有起作用,null值還是被忽略了。

  Joiner 不僅可以返回string ,還有方法能夠處理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");

  只要是實現了 Appendble 接口的類都可以用 Joiner 來處理。

FileWriter fileWriter = new FileWriter(new File("path")):
List<Date> dateList = getDates();
Joiner joiner = Joiner.on("#").useForNulls(" ");
//returns the FileWriter instance with the values appended into it
joiner.appendTo(fileWriter,dateList);

  上面的例子中,我們傳遞了 FileWriter 實例 和 Data 對象給 Joiner,Joiner 將連接list中所有的數據給 FileWriter 實例并返回。

  如上所示,Joiner 是一個非常有用的類,很容易處理日常的一些任務。還有一個特殊的方法,它和 Joiner 的工作方式是一樣,但是它連接的是根據指定的分隔符連接 Map 的 key 和 value。

mapJoiner = Joiner.on("#").withKeyValueSeparator("=");

  下面的單元測試類展示了如何連接 Map 的 key-value。

Map<String, String> 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);System.out.println(returnedString);

  運行結果:Washington D.C=Redskins#New York City=Giants#Philadelphia=Eagles#Dallas=Cowboys

?

?

?

?

    


?

?

轉載于:https://www.cnblogs.com/IcanFixIt/p/4499729.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273271.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273271.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273271.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

xampp 無法啟動mysql

Error: could not open single-table tablespace file .\test\dr.ibd 在網上搜索到的解決方案都不管用。結果整合了兩個解決方案&#xff1a; 刪掉xampp/data/ib_logfile0 xampp/data/ib_logfile1 xampp/data/ibdata1 三個文件就好了轉載于:https://www.cnblogs.com/fyydnz/p/4…

mysql005約束.列級別

-- 列級約束 -- sno 主鍵&#xff1a;唯一&#xff0c;不為空&#xff0c;自增 -- name 非空 -- sex 非空&#xff0c;默認值&#xff0c;只有男女 -- age 0-30歲 -- score 非空 -- dtdate 非空 -- classname 非空 -- email唯一 -- 創建表&#xff0c;增加列級約束 …

hdu.1430.魔板(bfs + 康托展開)

魔板 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2170 Accepted Submission(s): 455 Problem Description在魔方風靡全球之后不久&#xff0c;Rubik先生發明了它的簡化版——魔板。魔板由8個同樣大小的方…

mysql006添加外鍵約束

-- 添加外鍵 -- 建立主表&#xff0c;班級表 CREATE TABLE class( cno int PRIMARY key auto_increment, cname VARCHAR(55) ) SELECT * FROM class; -- 建立從表&#xff0c;學生表 CREATE table stu( sno int PRIMARY KEY auto_increment, sname VARCHAR(55), sex ch…

Circle-Progress-View

https://github.com/jakob-grabner/Circle-Progress-View 轉載于:https://www.cnblogs.com/eustoma/p/4507476.html

python1.學生管理系統

#定義函數界面 def info_print(): print("請選擇功能-----------") print("1.添加學員") print("2.刪除學員") print("3.修改學員") print("4.查詢學員") print("5.顯示所有學員") print("6.退出系統"…

初學JSP+Servlet常見的錯誤

web編程中常見的錯誤: 一、404(要訪問的資源沒有找到) 1.web程序有沒有部署(將項目到tomcat中) 2.url有沒有寫錯(包括大小寫&#xff0c;包括項目有沒有重命名) 3.有沒有將jsp/html放在WEB-INF 4.如果訪問的是servlet,那么看下web.xml中url-pattern中的配置和你寫的名字是否一致…

python2.面向對象學生管理系統

main.py(程序主入口) #1.導入管理系統模塊 from mangerSystem import * #2.啟動管理系統 #保證是當前文件運行才啟動管理系統&#xff1a;if -- 創建對象并調用run()方法 if __name__"__main__": student_managerStudentManager() student_manager.run() student…

elasticsearch 刪除滿足條件的語句_ELK從入門到還未精通(二)——ElasticSearch上篇

大家好&#xff0c;我是泥腿子安尼特&#xff0c;5個月沒在李佬都公眾號更新文章了。上一篇&#xff0c;大致介紹了作為工具人的我是如何基本使用這一套ELK 系統的。今天就講講這個最重要的E——基于Lucene的搜索引擎ElasticSearch(后面簡稱ES)。最近剛搬家&#xff0c;沒想到隔…

mysql004操作表.增刪改

-- 查詢表中數據 DQL 注意在mydb數據庫下面 SELECT * FROM stdent; -- 新增數據 這種寫法數據的循序和數據庫的字段循序保持一致。 INSERT INTO stdent values (1,"張三","男",25,"2021.1.1","java","123qq.com"); --…

python2.面向對象.學生管理

main.py(程序主入口) #1.導入管理系統模塊 from mangerSystem import * #2.啟動管理系統 #保證是當前文件運行才啟動管理系統&#xff1a;if -- 創建對象并調用run()方法 if __name__"__main__": student_managerStudentManager() student_manager.run() student…

紙板怎么切割光滑_激光切割機大PK!光纖、CO2、YAG,你選誰?!

問&#xff1a;我也是鈑金人&#xff0c;怎么加入組織&#xff1f;答&#xff1a;點標題下方藍字“鈑金家園光纖激光切割機之所以能在市場快速站穩腳跟并且逐步替代傳統切割工藝&#xff0c;是由于其在各方面獨具優勢&#xff0c;那么他到底優秀在哪里呢&#xff1f;我們把CO2激…

mysql007.算數運算.別名.去重.排序

-- 創建DEPT表 CREATE TABLE DEPT( DEPTNO int(2) not null, DNAME VARCHAR(14), LOC VARCHAR(13) ); -- 查詢DEPT表 SELECT * FROM DEPT; -- 修改表&#xff0c;添加主鍵 ALTER TABLE DEPT add CONSTRAINT PK_DEPT PRIMARY KEY(DEPTNO); -- 查詢表結構。 desc DEPT; …

loadrunner11錄制不成功解決方法(收集)

問題一&#xff1a;loadrunner11錄制時events為0的解決辦法 剛安裝好的11.0&#xff0c;系統環境是&#xff1a;WINXPIE8LR11 OR WIN7IE11LR11 1、ie去掉工具—internet選項中->高級—>去掉“啟用第三方瀏覽器擴展”&#xff0c;重啟ie后發現還不行&#xff0c;繼續&…

c# 藍牙虛擬串口_藍牙模塊——基礎知識介紹

1. 數據透傳藍牙模塊可以通過串口(SPI、IIC)和MCU控制設備進行數據傳輸。藍牙模塊可以做為主機和從機。主機就是能夠搜索別的藍牙模塊并主動建立連接&#xff0c;從機則不能主動建立連接&#xff0c;只能等別人連接自己。2. 低功耗低功耗藍牙(Bluetooth Low Energy)&#xff0c…

Error: could not open `C:\Java\jre7\lib\i386\jvm.cfg

打開eclipse時出現Error: could not open C:\Program Files\Java\jre7\lib\i586\jvm.cfg’) 刪除 c:\windows\system32\java&#xff0c; c:\windows\system32\javaw&#xff0c; c:\windows\system32\javaws, 如果是64位系統&#xff0c;還要刪除 c:\windows\SysWOW64\java&am…

java項目001.雙色球游戲

package Suangseq; //雙色球游戲制作。 import java.awt.SystemColor; import java.util.Arrays; import java.util.Scanner; public class TextA { public static void main(String[] args) { boolean flagfalse;//定義一個布爾類型的變量。 int[] mynull;//定義一個變量 in…

華為手機30s桌面循環滑動_華為發飆了!麒麟820+雙模5G,從2699元跌至2499元,超出消費者預期...

閱讀本文前&#xff0c;請您先點擊上面的“藍色字體”&#xff0c;再點擊“關注”&#xff0c;這樣您就可以繼續免費收到文章了。每天都會有分享&#xff0c;都是免費訂閱&#xff0c;請您放心關注。注圖文來源網絡&#xff0c;侵刪 …

混合模式程序集是針對“v2.0.50727”版的運行時生成的,在沒有配置其他信息的情況下,無法在 4.0 運行時中加載該程序集...

其調用的方法是從sqlite數據庫中獲取原來已經使用過的數據庫連接&#xff0c;當時也沒注意&#xff0c;就是準備設斷點然后單步調試&#xff0c;結果竟然是斷點無法進入方法體內&#xff0c;后來仔細看了一下方法體的時候發現了一個問題&#xff0c;就是現有的System.Data.Sqli…

mysql008where.or.in查詢

-- 創建EMP表 CREATE TABLE EMP ( EMPNO int(4) PRIMARY KEY, ENAME VARCHAR(10), JOB VARCHAR(9), MGR INT(4), HIREDATE DATE, SAL DOUBLE(7,2), COMM DOUBLE(7,2), DEPTNO INT(2) ); -- where查詢 語句 SELECT * from emp; SELECT * FROM DEPT; SELECT * FROM…