guava包Strings工具类

有时候我们在项目中需要拼接一组字符串,中间用分隔符连接。

但使用jdk,你不得对最后一个元素和前面的其他元素进行区分。

使用guava提供的工具类让这一切变得简单。

一、拼接字符串

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

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

二、拆分字符串

拆分字符串是拼接字符串的逆向操作。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"

但是这真是我们想要的结果吗?

guava包Splitter允许你对拆分行为进行完全的控制以规避令人迷惑的结果。

Splitter.on(',')
    .trimResults()
    .omitEmptyStrings()
    .split("foo,bar,,   qux");
//[foo, bar, qux]

更多选择

Base Factories

MethodDescriptionExample
Splitter.on(char) 按照一个字符拆分 Splitter.on(';')
Splitter.on(CharMatcher) 按照一组字符规则拆分 Splitter.on(CharMatcher.BREAKING_WHITESPACE)
Splitter.on(CharMatcher.anyOf(";,."))
Splitter.on(String) 按照一个字符串拆分 Splitter.on(", ")
Splitter.on(Pattern)
Splitter.onPattern(String)
按照正则表达式拆分 Splitter.onPattern("\r?\n")
Splitter.fixedLength(int) 按照字符长度拆分 Splitter.fixedLength(3)

Modifiers

 

MethodDescriptionExample
omitEmptyStrings() 自动忽略空字符串 Splitter.on(',').omitEmptyStrings().split("a,,c,d") returns "a", "c", "d"
trimResults() 自动清除空白符 Splitter.on(',').trimResults().split("a, b, c, d") returns "a", "b", "c", "d"
trimResults(CharMatcher) 清除指定字符 Splitter.on(',').trimResults(CharMatcher.is('_')).split("_a ,_b_ ,c__") returns "a ", "b_ ", "c".
limit(int) 指定拆分字符串个数 Splitter.on(',').limit(3).split("a,b,c,d") returns "a", "b", "c,d"

 如果你希望得到一个List, 用 splitToList() 替代split().

如果你想把字符串拆分成Map,也能实现

Map<String, String> split2 =
                Splitter.on(",")
                        .withKeyValueSeparator(":")
                        .split("A:1,C:2,E:3");
        System.out.println(split2);
        //{A=1, C=2, E=3}

三、CharMatcher

CharMatcher提供一种对特殊字符更细粒度的控制。

 String string = "WANG\tbin\n123!@#\r";
 String noControl = CharMatcher.javaIsoControl().removeFrom(string);//WANGbin123!@#
 String theDigits = CharMatcher.digit().retainFrom(string); //123
 String spaced = CharMatcher.whitespace().trimAndCollapseFrom(string, ' ');//WANG bin 123!@#
 String noDigits = CharMatcher.javaDigit().replaceFrom(string, "*"); //WANG    bin\n***!@#
 String lowerAndDigit = CharMatcher.javaDigit().or(CharMatcher.javaLowerCase()).retainFrom(string);//bin123
   

 

posted @ 2022-02-11 09:28  Mars.wang  阅读(178)  评论(0编辑  收藏  举报