一、Guava是什么
Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库。这个库是为了方便编码,并减少编码错误。这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方法。
直白一些就是:Guava是谷歌的很多项目正在使用的一个工具库,可以避免很多的编码错误,支持集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证等的方法。
二、Guava对于字符串的便利操作
1、List<String>可Iterable的字符串数组拼接和写文件 -- Joiner
(1)Joiner指定间隔符拼接字符串,对于Null字符会抛出异常,可以跳过或者替换
private final List<String> stringList = Arrays.asList("Google", "Guava", "Java");
private final List<String> stringListWithNullValue = Arrays.asList("Google", null);
String result = Joiner.on("#").join(stringList);
System.out.println(Joiner.on("#").skipNulls().join(stringListWithNullValue));
System.out.println(Joiner.on("#").useForNull("DEFAULT").join(stringListWithNullValue));
Map<String, String> testMap = new HashMap<>();
testMap.put("hello", "world");
testMap.put("java", "javaScript");
System.out.println(Joiner.on("#").withKeyValueSeparator("=").join(testMap)); //java=javaScript#hello=world
上面这些JAVA8也可以做到,Appender是个神奇:
StringBuilder builder = Joiner.on("#").useForNull("DEFAULT").appendTo(stringBuilder, stringListWithNullValue);
可以直接append到文件
File file = new File("hsf.txt");
try (FileWriter fileWriter = new FileWriter(file)) {
Joiner.on("#").appendTo(fileWriter, stringList);
} catch (Exception e) {
fail();
}
Java8写文件的形式如下:
try (BufferedWriter writer =
Files.newBufferedWriter(path,
StandardCharsets.UTF_8,
StandardOpenOption.APPEND)){
writer.write("Hello World -字母哥!!");
}
2、String的spliter
拆分字符串的基本操作,omitEmptStrings是忽略null,如果是空格还是会占用的,trimResults是直接去掉拆分后的前后的空白
fixedLength是固定长度分隔,on是按照分隔串分隔,谁在后面谁生效
List<String> result = Splitter.on("|").splitToList("Helllo|world"); // Hello world
List<String> result1 = Splitter.on("|").omitEmptyStrings().splitToList("Helll|| o|world"); // [Helll, o, world]
List<String> result2 = Splitter.on("|").omitEmptyStrings().splitToList("Helll| | o|world"); // [Helll, , o, world]
List<String> result3 = Splitter.on("|").omitEmptyStrings().trimResults().splitToList("Helll| | o|world"); // [Helll, o, world]
List<String> result4 = Splitter.on("|").omitEmptyStrings().trimResults().limit(2).splitToList("hello|world|zhangfei"); //[hello, world|zhangfei]
List<String> result5 = Splitter.on("|").omitEmptyStrings().trimResults().trimResults(CharMatcher.is('h')).splitToList("hello|world|zhangfei"); //[ello, world|zhangfei]
List<String> result6 = Splitter.fixedLength(2).omitEmptyStrings().trimResults().splitToList("hello|world|zhangfei"); //[he, ll, o|, wo, rl, d|, zh, an, gf, ei]
转换成Map或者流或者正则分隔
List<String> result8 = Splitter.on(Pattern.compile("\\|")).omitEmptyStrings().trimResults().splitToList("hello|world|zhangfei"); //[hello, world, zhangfei]
List<String> result9 = Splitter.onPattern("\\|").omitEmptyStrings().trimResults().splitToList("hello|world|zhangfei"); //[hello, world, zhangfei]
Map<String,String> result10 = Splitter.onPattern("\\|").omitEmptyStrings().trimResults().withKeyValueSeparator("=").split("hello=1|world=2|zhangfei=3"); //{hello=1, world=2, zhangfei=3}
2、Guava的断言 Preconditions
暂时不使用,代码中不喜欢使用断言
3、Guava的断言Strings和CharSet
Strings的公共前缀、后缀,重复和前后填充还是比较有用的。CharSets主要用于枚举, CharMatcher还有一些东西,但是其它工具也可以使用,没有啥推荐的。
Strings.emptyToNull("");
Strings.commonPrefix("hello", "hell");
Strings.commonSuffix("hello", "hoho");
Strings.isNullOrEmpty("");
Strings.repeat("he", 3);
Strings.padStart("Alex", 5, 'H'); // 当字符串不够长度时,在前面填充H
Strings.padEnd("Alex", 5, 'H');
Charsets.UTF_8