guava(3)--基本工具类

基本工具:

转载自:http://my.oschina.net/indestiny/blog/215041

使用Joiner类:

  • 例如我们想将字符串列表通过一个分隔符链接起来,以前的方式就是迭代append等操作,使用Joiner可以更方便。
  • Joiner一旦创建不可变,符合不变性,因此线程安全

看一些测试用例:

  • 链接字符串列表
01 String delimiter = ",";
02 // Joiner类一旦创建则不可变,满足不可变性,因此线程安全
03 Joiner joiner = Joiner.on(delimiter);
04          
05 // 忽略null
06 String excludeNullString = joiner.skipNulls().join(langs);
07 // 将null替代为empty字符串
08 String replaceNullString = joiner.useForNull("empty").join(langs);
09 System.out.println("excludeNullString: " + excludeNullString);
10 System.out.println("replaceNullString: " + replaceNullString);
11          
12 // 不对null处理,默认会抛NullPointerException
13 String defaultNullString = joiner.join(langs); //langs为List<String>
14 System.out.println("defaultNullString: " + defaultNullString);
  • 链接多个字符串
1 String delimiter = ",";
2 // Joiner类一旦创建则不可变,满足不可变性,因此线程安全
3 Joiner joiner = Joiner.on(delimiter).skipNulls();
4 //joiner.useForNull("empty"); //重复定义null操作会抛异常
5 String res = joiner.join(null"foo","bar");
6 System.out.println(res); //foo,bar
  • appendTo到实现了Appendable接口的类中:
01 //append到StringBuilder
02 StringBuilder stringBuilder = new StringBuilder();
03 Joiner joiner = Joiner.on(",").skipNulls();
04 joiner.appendTo(stringBuilder, "appendTo""StringBuilder");
05 System.out.println(stringBuilder); //appendTo,StringBuilder
06          
07 //append到输出流
08 FileWriter writer = new FileWriter("append_text.txt");
09 joiner.appendTo(writer, "appendTo""FileWriter");
10 writer.close();
  • 通过MapJoiner链接Map对象:
1 Map<String, String> map = new HashMap<>();
2 map.put("key1""value1");
3 map.put("key2""value2");
4 map.put("key3""value3");
5 MapJoiner mapJoiner = Joiner.on(",").withKeyValueSeparator("=");
6 String str = mapJoiner.join(map);
7 System.out.println(str);//结果如:key3=value3,key2=value2,key1=value1

使用Splitter类:

  • Splitter功能与Joiner相反,其对字符串进行分割操作
  • 分割字符串,返回Iterable<String>对象:
1 String str = "try ,do , your , best";
2 Splitter splitter = Splitter.on(",").trimResults(); //用逗号分割且去掉每个字符串周围的空格
3 //splitter.trimResults(); //这样是不会去掉各个元素空格的, 它仅返回一个新的Splitter
4 Iterable<String> res = splitter.split(str);
5 System.out.println(res); //[try, do, your, best]
  • 使用MapSplitter分割字符串,返回Map<String, String>对象:
1 String str = "key3=value3,key2=value2,key1=value1";
2 MapSplitter splitter = Splitter.on(",").withKeyValueSeparator("=");
3 Map<String, String> map = splitter.split(str);
4 System.out.println(map);// {key3=value3, key2=value2, key1=value1}

使用Strings类:

  • Strings类有用的API:
01 //用padChar填充string后面, 使string最小长度为minLength
02 padEnd(String string, int minLength, char padChar)
03 //用padChar填充string前面, 使string最小长度为minLength
04 padStart(String string, int minLength, char padChar)
05 //null转换为""
06 nullToEmpty(String string)
07 //""转换为null
08 emptyToNull(String string)
09 //true, 如果字符串为null或者""
10 isNullOrEmpty(Strng string)

使用CharMatcher类:

  • 替换多个连续的空格为单个空格
1 String tabsAndSpaces = "String  with      spaces     and tabs";
2 //将多个连续的空格替换为一个
3 String scrubbed = CharMatcher.WHITESPACE.collapseFrom(tabsAndSpaces,' ');
4 System.out.println(scrubbed); //String with spaces and tabs
  • 有时我们还想将头尾的空格去掉
1 String tabsAndSpaces = "    String  with     spaces     and tabs";
2 String scrubbed = CharMatcher.WHITESPACE.trimAndCollapseFrom(tabsAndSpaces, ' ');
3 System.out.println(scrubbed); //String with spaces and tabs
  • 保留制定字符,如数字,字母等:
1 String lettersAndNumbers = "foo989yxbar234";
2 String retained = CharMatcher.JAVA_DIGIT.retainFrom(lettersAndNumbers); //保留数字
3 System.out.println(retained); //989234
  • 你也可以通过Or组合多个CharMatcher:
1 CharMatcher cm = CharMatcher.JAVA_DIGIT.or(CharMatcher.WHITESPACE);
2 String retained = cm.retainFrom("foo9 89y xbar 234");//保留数字和空格
3 System.out.println(retained); //9 89  234

使用Preconditions类:

  • 这是一个用于判断条件的一个工具,类似junit中Aseert功能。
1 checkNotNull(obj, "检查对象不能为空");
2 checkElementIndex(index, arr.length,"检查数组索引");
3 checkArgument(valueToSet <= 100"检查参数值");
4 checkState(validateObjectState(), "检查对象状态");

使用Objects类:

  • toString方法的使用。
01 public class Book implements Comparable<Book> {
02     private Person author;
03     private String title;
04     private String publisher;
05     private String isbn;
06     private double price;
07     ...
08     @Override
09     public int compareTo(Book o) {
10          return ComparisonChain.start() //链式比较,在第一个非0处返回
11                  .compare(this.title, o.getTitle())
12                  .compare(this.author, o.getAuthor())
13                  .compare(this.publisher, o.getPublisher())
14                  .compare(this.isbn, o.getIsbn())
15                  .compare(this.price, o.getPrice())
16                  .result();
17     }
18      
19     @Override
20     public int hashCode(){
21         return Objects.hashCode(title, author, publisher, isbn);//hashCode生成
22     }
23  
24     @Override
25     public String toString() {
26         return Objects.toStringHelper(this//toString
27                 .omitNullValues() //忽略null属性
28                 .add("title", title)
29                 .add("author", author)
30                 .add("publisher", publisher)
31                 .add("price",price)
32                 .add("isbn", isbn).toString();
33     }
34 }
  • 获取非null默认值
1 String str = null;
2 str = Objects.firstNonNull(str, "defaut value");
3 System.out.println(str);

以上就是基本工具使用。

不吝指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值