Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库。这个库是为了方便编码,并减少编码错误。这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方法。
直白一些就是:Guava是谷歌的很多项目正在使用的一个工具库,可以避免很多的编码错误,支持集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证等的方法。
(1)Joiner指定间隔符拼接字符串,对于Null字符会抛出异常,可以跳过或者替换
- private final List
stringList = Arrays.asList("Google", "Guava", "Java"); -
- private final List
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
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 -字母哥!!");
- }
拆分字符串的基本操作,omitEmptStrings是忽略null,如果是空格还是会占用的,trimResults是直接去掉拆分后的前后的空白
fixedLength是固定长度分隔,on是按照分隔串分隔,谁在后面谁生效
- List
result = Splitter.on("|").splitToList("Helllo|world"); // Hello world - List
result1 = Splitter.on("|").omitEmptyStrings().splitToList("Helll|| o|world"); // [Helll, o, world] - List
result2 = Splitter.on("|").omitEmptyStrings().splitToList("Helll| | o|world"); // [Helll, , o, world] - List
result3 = Splitter.on("|").omitEmptyStrings().trimResults().splitToList("Helll| | o|world"); // [Helll, o, world] - List
result4 = Splitter.on("|").omitEmptyStrings().trimResults().limit(2).splitToList("hello|world|zhangfei"); //[hello, world|zhangfei] - List
result5 = Splitter.on("|").omitEmptyStrings().trimResults().trimResults(CharMatcher.is('h')).splitToList("hello|world|zhangfei"); //[ello, world|zhangfei] - List
result6 = Splitter.fixedLength(2).omitEmptyStrings().trimResults().splitToList("hello|world|zhangfei"); //[he, ll, o|, wo, rl, d|, zh, an, gf, ei]
转换成Map或者流或者正则分隔
- List
result8 = Splitter.on(Pattern.compile("\\|")).omitEmptyStrings().trimResults().splitToList("hello|world|zhangfei"); //[hello, world, zhangfei] - List
result9 = Splitter.onPattern("\\|").omitEmptyStrings().trimResults().splitToList("hello|world|zhangfei"); //[hello, world, zhangfei] - Map
result10 = Splitter.onPattern("\\|").omitEmptyStrings().trimResults().withKeyValueSeparator("=").split("hello=1|world=2|zhangfei=3"); //{hello=1, world=2, zhangfei=3}
暂时不使用,代码中不喜欢使用断言
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