走近Guava(一): 基本工具

基本工具:

使用Joiner類:

  • 例如咱們想將字符串列表經過一個分隔符連接起來,之前的方式就是迭代append等操做,使用Joiner能夠更方便。
  • Joiner一旦建立不可變,符合不變性,所以線程安全

看一些測試用例: java

  • 連接字符串列表
String delimiter = ",";
// Joiner類一旦建立則不可變,知足不可變性,所以線程安全
Joiner joiner = Joiner.on(delimiter);
		
// 忽略null
String excludeNullString = joiner.skipNulls().join(langs);
// 將null替代爲empty字符串
String replaceNullString = joiner.useForNull("empty").join(langs);
System.out.println("excludeNullString: " + excludeNullString);
System.out.println("replaceNullString: " + replaceNullString);
		
// 不對null處理,默認會拋NullPointerException
String defaultNullString = joiner.join(langs); //langs爲List<String>
System.out.println("defaultNullString: " + defaultNullString);
  • 連接多個字符串
String delimiter = ",";
// Joiner類一旦建立則不可變,知足不可變性,所以線程安全
Joiner joiner = Joiner.on(delimiter).skipNulls();
//joiner.useForNull("empty"); //重複定義null操做會拋異常
String res = joiner.join(null, "foo","bar");
System.out.println(res); //foo,bar
  • appendTo到實現了Appendable接口的類中:
//append到StringBuilder
StringBuilder stringBuilder = new StringBuilder();
Joiner joiner = Joiner.on(",").skipNulls();
joiner.appendTo(stringBuilder, "appendTo", "StringBuilder");
System.out.println(stringBuilder); //appendTo,StringBuilder
		
//append到輸出流
FileWriter writer = new FileWriter("append_text.txt");
joiner.appendTo(writer, "appendTo", "FileWriter");
writer.close();
  • 經過MapJoiner連接Map對象:
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
MapJoiner mapJoiner = Joiner.on(",").withKeyValueSeparator("=");
String str = mapJoiner.join(map);
System.out.println(str);//結果如:key3=value3,key2=value2,key1=value1

使用Splitter類:

  • Splitter功能與Joiner相反,其對字符串進行分割操做
  • 分割字符串,返回Iterable<String>對象:
String str = "try ,do , your , best";
Splitter splitter = Splitter.on(",").trimResults(); //用逗號分割且去掉每一個字符串周圍的空格
//splitter.trimResults(); //這樣是不會去掉各個元素空格的, 它僅返回一個新的Splitter
Iterable<String> res = splitter.split(str);
System.out.println(res); //[try, do, your, best]
  • 使用MapSplitter分割字符串,返回Map<String, String>對象:
String str = "key3=value3,key2=value2,key1=value1";
MapSplitter splitter = Splitter.on(",").withKeyValueSeparator("=");
Map<String, String> map = splitter.split(str);
System.out.println(map);// {key3=value3, key2=value2, key1=value1}

使用Strings類:

  • Strings類有用的API:
//用padChar填充string後面, 使string最小長度爲minLength
padEnd(String string, int minLength, char padChar)
//用padChar填充string前面, 使string最小長度爲minLength
padStart(String string, int minLength, char padChar)
//null轉換爲""
nullToEmpty(String string)
//""轉換爲null
emptyToNull(String string)
//true, 若是字符串爲null或者""
isNullOrEmpty(Strng string)

使用CharMatcher類:

  • 替換多個連續的空格爲單個空格
String tabsAndSpaces = "String  with      spaces     and tabs";
//將多個連續的空格替換爲一個
String scrubbed = CharMatcher.WHITESPACE.collapseFrom(tabsAndSpaces,' ');
System.out.println(scrubbed); //String with spaces and tabs
  • 有時咱們還想將頭尾的空格去掉
String tabsAndSpaces = "    String  with     spaces     and tabs";
String scrubbed = CharMatcher.WHITESPACE.trimAndCollapseFrom(tabsAndSpaces, ' ');
System.out.println(scrubbed); //String with spaces and tabs
  • 保留制定字符,如數字,字母等:
String lettersAndNumbers = "foo989yxbar234";
String retained = CharMatcher.JAVA_DIGIT.retainFrom(lettersAndNumbers); //保留數字
System.out.println(retained); //989234
  • 你也能夠經過Or組合多個CharMatcher:
CharMatcher cm = CharMatcher.JAVA_DIGIT.or(CharMatcher.WHITESPACE);
String retained = cm.retainFrom("foo9 89y xbar 234");//保留數字和空格
System.out.println(retained); //9 89  234

使用Preconditions類:

  • 這是一個用於判斷條件的一個工具,相似junit中Aseert功能。
checkNotNull(obj, "檢查對象不能爲空");
checkElementIndex(index, arr.length,"檢查數組索引");
checkArgument(valueToSet <= 100, "檢查參數值");
checkState(validateObjectState(), "檢查對象狀態");

使用Objects類:

  • toString方法的使用。
public class Book implements Comparable<Book> {
	private Person author;
	private String title;
	private String publisher;
	private String isbn;
	private double price;
	...
	@Override
	public int compareTo(Book o) { 
		 return ComparisonChain.start() //鏈式比較,在第一個非0處返回
                 .compare(this.title, o.getTitle())
                 .compare(this.author, o.getAuthor())
                 .compare(this.publisher, o.getPublisher())
                 .compare(this.isbn, o.getIsbn())
                 .compare(this.price, o.getPrice())
                 .result();
	}
	
	@Override
	public int hashCode(){
		return Objects.hashCode(title, author, publisher, isbn);//hashCode生成
	}

	@Override
	public String toString() {
		return Objects.toStringHelper(this) //toString
                .omitNullValues() //忽略null屬性
                .add("title", title)
                .add("author", author)
                .add("publisher", publisher)
                .add("price",price)
                .add("isbn", isbn).toString();
	}
}
  • 獲取非null默認值
String str = null;
str = Objects.firstNonNull(str, "defaut value");
System.out.println(str);

以上就是基本工具使用。 數組

不吝指正。 安全

相關文章
相關標籤/搜索