1. 程式人生 > >guava字串處理:分割,連線,填充

guava字串處理:分割,連線,填充

聯結器[Joiner]

用分隔符把字串序列連線起來也可能會遇上不必要的麻煩。如果字串序列中含有null,那連線操作會更難。Fluent風格的Joiner讓連線字串更簡單。

1 Joiner joiner = Joiner.on("; ").skipNulls();
2 return joiner.join("Harry"null"Ron""Hermione");

上述程式碼返回”Harry; Ron; Hermione”。另外,useForNull(String)方法可以給定某個字串來替換null,而不像skipNulls()方法是直接忽略null。 Joiner也可以用來連線物件型別,在這種情況下,它會把物件的toString()值連線起來。

1 Joiner.on(",").join(Arrays.asList(157)); // returns "1,5,7"

警告:joiner例項總是不可變的。用來定義joiner目標語義的配置方法總會返回一個新的joiner例項。這使得joiner例項都是執行緒安全的,你可以將其定義為static final常量。

拆分器[Splitter]

JDK內建的字串拆分工具有一些古怪的特性。比如,String.split悄悄丟棄了尾部的分隔符。 問題:”,a,,b,”.split(“,”)返回?

  1. “”, “a”, “”, “b”, “”
  2. null, “a”, null, “b”, null
  3. “a”, null, “b”
  4. “a”, “b”
  5. 以上都不對

正確答案是5:””, “a”, “”, “b”。只有尾部的空字串被忽略了。 Splitter使用令人放心的、直白的流暢API模式對這些混亂的特性作了完全的掌控。

1 Splitter.on(',')
2 .trimResults()
3 .omitEmptyStrings()
4 .split("foo,bar,,   qux"
);

上述程式碼返回Iterable<String>,其中包含”foo”、”bar”和”qux”。Splitter可以被設定為按照任何模式、字元、字串或字元匹配器拆分。

拆分器工廠

拆分器修飾符

如果你想要拆分器返回List,只要使用Lists.newArrayList(splitter.split(string))或類似方法。 警告:splitter例項總是不可變的。用來定義splitter目標語義的配置方法總會返回一個新的splitter例項。這使得splitter例項都是執行緒安全的,你可以將其定義為static final常量。

字元匹配器[CharMatcher]

在以前的Guava版本中,StringUtil類瘋狂地膨脹,其擁有很多處理字串的方法:allAscii、collapse、collapseControlChars、collapseWhitespace、indexOfChars、lastIndexNotOf、numSharedChars、removeChars、removeCrLf、replaceChars、retainAllChars、strip、stripAndCollapse、stripNonDigits。 所有這些方法指向兩個概念上的問題:

  1. 怎麼才算匹配字元?
  2. 如何處理這些匹配字元?

為了收拾這個泥潭,我們開發了CharMatcher。

直觀上,你可以認為一個CharMatcher例項代表著某一類字元,如數字或空白字元。事實上來說,CharMatcher例項就是對字元的布林判斷——CharMatcher確實也實現了Predicate<Character>——但類似”所有空白字元”或”所有小寫字母”的需求太普遍了,Guava因此建立了這一API。

然而使用CharMatcher的好處更在於它提供了一系列方法,讓你對字元作特定型別的操作:修剪[trim]、摺疊[collapse]、移除[remove]、保留[retain]等等。CharMatcher例項首先代表概念1:怎麼才算匹配字元?然後它還提供了很多操作概念2:如何處理這些匹配字元?這樣的設計使得API複雜度的線性增加可以帶來靈活性和功能兩方面的增長。

1 String noControl = CharMatcher.JAVA_ISO_CONTROL.removeFrom(string); //移除control字元
2 String theDigits = CharMatcher.DIGIT.retainFrom(string); //只保留數字字元

相關推薦

guava字串處理分割連線填充

聯結器[Joiner] 用分隔符把字串序列連線起來也可能會遇上不必要的麻煩。如果字串序列中含有null,那連線操作會更難。Fluent風格的Joiner讓連線字串更簡單。 1 Joiner joiner = Joiner.

[Google Guava] 6-字串處理分割連線填充

原文連結 譯文連結 譯者:沈義揚,校對:丁一 聯結器[Joiner] 用分隔符把字串序列連線起來也可能會遇上不必要的麻煩。如果字串序列中含有null,那連線操作會更難。Fluent風格的Joiner讓連線字串更簡單。 Joiner joiner = Joiner.on("; ").skipNu

Python基礎(4)python中的特性入門篇(索引切片連線重複成員操作符)

在介紹列表的時候發現,有一些特性沒有提前解釋,而穿插在其中又會略顯重複和雜亂,索性在這裡來個總結。 接觸python的人不難了解到一個詞:高階特性。 其實內容並不高深,因為高階特性的產生,就是為了讓程式碼更簡介。 以下先介紹簡單的:索引,切片,連線,重複,成員操作符,以及其應用物件。 &nb

【cmd】批處理bat檔案執行cmd會顯示中文亂碼Jenkins日誌顯示中文亂碼——解決方案

目錄 一、批處理命令執行亂碼情況 二、解決方法 一、批處理命令執行亂碼情況 (1)Jenkins批處理命令亂碼: (2)cmd視窗顯示亂碼: 二、解決方法 (1)【最關鍵的步驟!】bat檔案編碼格式修改為ANSI格式: (

InfluxDB如何進行連線數學測量

如果您是InfluxData社群的成員,那麼您可能希望在某些時候跨測量執行數學運算。你做了一些谷歌搜尋並偶然發現了這個GitHub問題3552並且流下了一滴小小的淚水。好吧,今天我成了好訊息的承載者。InfluxData釋出了Flux的技術預覽,Flux是一種新的查詢語言和時間序列資料引擎,它具有跨

sql學習筆記基礎語法連線建立庫表

#連線庫,設定好環境變數或者右鍵powershell . mysql -u 使用者名稱 -p 密碼 #檢視庫 show databases; #建立庫 create database 庫名 charset utf8;#宣告使用字元 #選擇庫 use 庫名;

資料預處理讀取檔案資料並存為python陣列

檔案的簡單讀取 # 定義一個將檔案中的資料轉化為陣列的類 import numpy as np class DataUtil: # =============================================================================

資料預處理原始資料集特徵數值化特徵值數值化

原始資料集,特徵數值化 在原始資料集中,feature是多種多樣的,為了方便處理,我們必須把feature數值化,而且還需要把特徵值數值化。 示例: x=[[黃色,小,成人,用手打] ,[黃色,小,成人,用腳踩] ,[黃色,小,小孩,用手打] ,[黃色,小,小孩,用腳踩] ,[黃

影象處理 灰度化二值化反色

灰度化 (grayscale) 將彩色影象轉化為灰度影象的過程稱為影象灰度化。彩色影象中的畫素值由RGB三個分量決定,每個分量都有0-255(256種)選擇,這樣一個畫素點的畫素值可以有1600萬種可能(256*256*256),而灰度圖的畫素點的畫素值是RGB三個分量值相

Python變數宣告連線全域性和本地

Python中的變數是什麼? Python變數是用於儲存值的保留記憶體位置。換句話說,python程式中的變數將資料提供給計算機進行處理。 Python中的每個值都有一個數據型別。Python中不同的資料型別是Numbers,List,Tuple,Strings,

java影象處理灰度化二值化降噪切割裁剪識別找相似等

前段時間做爬蟲,涉及到對圖片驗證碼的破解,這裡羅列一些常用的影象處理方法,都很簡單並沒用到什麼複雜的演算法,所以不涉及opencv,都是一些直接對rgb畫素點的操作,很簡單也很好理解,至於識別直接用的tesseract-ocr,也可以用svm。(ps:圖片的畫素值矩陣的原點在

mysql 一個被誤導的錯誤 mysql jdbc連線資料庫ip變成了本地ip?

mysql 一個被誤導的錯誤: mysql jdbc連線,資料庫ip變成了本地ip? java.sql.SQLException: Access denied foruser 'btir'@'172.43.5.48' (using password: YES) 一個被

實驗三 程式設計編譯連線跟蹤

實驗內容: (1)將下面的程式儲存為t1.asm檔案,將其生成可執行檔案t1.exe assume  cs:codesg codesg  segment       mov  ax , 2000H      

實驗 3 程式設計編譯連線跟蹤

一、實驗目的 1.  掌握組合語言源程式(8086 dos 彙編)編寫→彙編→連結→除錯的方法 2.  加深對 1-4 章基礎知識的理解   二、實驗準備 1. 結合第 4 章課件和教材,學習/複習完整彙編源程式編寫→彙編→連線→執行→除錯

資料庫基礎(2)選擇投影連線除法運算

關係資料庫中的選擇,投影,連線,除法都是很重要的運算 選擇 定義:在關係中選擇在指定屬性上有確定值的關係的子集。表示為: 選擇運算是選擇關係中行的子集,即選擇滿足條件的元組 例: 1.查詢資訊系(IS系)全體學生 σ Sdept=‘IS’(Student) 2.查詢年齡小於

SQL Server 非聚集索引的覆蓋連線交叉和過濾 (第二篇)

在SQL Server中,非聚集索引其實可以看做是一個含有聚集索引的表,但相對實際的表來說,非聚集索引中所儲存的表的列數要少得多,一般就是索引列,聚集鍵(或RID)。非聚集索引僅僅包含源表中的非聚集索引的列和指向實際物理表的指標。 一、非聚集索引之INCLUDE   非聚集索引其實可以看做一

字串處理多條件篩選

杭電1039:題目大意:輸入一串小寫字母,檢查是否能夠作為安全的密碼使用。 能作為安全密碼的字串符合三個條件: 1.它必須包含至少一個母音。             2.它不能包含三個連續的母音或三個連續的子音。             3.它不能包含兩個連續的相同的字母

linux下的redis安裝 連線測試

Redis是c語言開發的。 安裝redis 需要c語言的編譯環境。如果沒有gcc需要線上安裝。yum install gcc-c++ 安裝步驟: 第一步:redis的原始碼包上傳到linux系統。 第二步:解壓縮redis。 第三步:編譯。進入redis原始碼目錄

字串處理ABAP中的正則表示式

正則表示式 ABAP中可以使用regex的地方 除了下面兩個語句可以使用regex外: FIND下面主函式的引數也可以使用regex: count()find()match()另外,還有兩個類也可以使用regex: 正則式語法規則 下面都是針對單個字元匹配的: Special character Me

Guava字串處理Joiner、Splitter

1、連線Joiner 用分隔符連線字串時,如果字串中途含有null,操作起來會需要特殊處理,Guava中提供的Joiner讓字串連線更簡潔。 //連結字串並忽略null,否則存在null報空指標異常 Joiner joiner = Joiner.on("|"