Java常用工具类汇总 2Google核心库GUAVA(附代码示例)

Posted 哪 吒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java常用工具类汇总 2Google核心库GUAVA(附代码示例)相关的知识,希望对你有一定的参考价值。

大家好,我是哪吒,小编是一个技术控,最近在研究公司其它项目的时候,发现了一个陌生的词汇,GUAVA,高大上的赶脚,顺藤摸瓜,走一波。

一、百度百科

Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,Guava 是Java的工具集,提供了一些常用的便利的操作工具类,减少因为空指针、异步操作等引起的问题BUG,提高开发效率。

二、字符串处理 Strings

常用方法如下:

  1. isNullOrEmpty:判断是否为空
  2. emptyToNull:空转null
  3. nullToEmpty:null转空
  4. commonPrefix:获取两个字符串相同的开头部分
  5. commonSuffix:获取两个字符串相同的结尾部分
  6. padStart:为达到固定长度,在字符串前端补全某字符
  7.  padEnd:为达到固定长度,在字符串结尾补全某字符
  8.  repeat:重复某字符串若干次,并拼接在一起
private static void StringsTest() {
    //isNullOrEmpty:判断是否为空
    System.out.println(Strings.isNullOrEmpty(""));//true
    System.out.println(Strings.isNullOrEmpty(null));//true
    System.out.println(Strings.isNullOrEmpty("zs"));//false
    
    //emptyToNull:空转null
    System.out.println(Strings.emptyToNull("")); //null
    
    //nullToEmpty:null转空
    System.out.println(Strings.nullToEmpty("zs"));//zs
    System.out.println(Strings.nullToEmpty(""));//
    System.out.println(Strings.nullToEmpty(null));//
    
    //commonPrefix:获取两个字符串相同的开头部分
    System.out.println(Strings.commonPrefix("abcdefg", "asdf"));//a
    System.out.println(Strings.commonPrefix("abcdefg", "qwer"));//
    System.out.println(Strings.commonPrefix("abcdefg", "abcf"));//abc
    System.out.println(Strings.commonPrefix("abcdefg", "abc"));//abc
    
    //commonSuffix:获取两个字符串相同的结尾部分
    System.out.println(Strings.commonSuffix("abcdefg", "abcfg"));//fg
    
    //padStart:为达到固定长度,在字符串前端补全某字符
    System.out.println(Strings.padStart("zs", 1, '*'));//zs,需要注意,这里不会返回s
    System.out.println(Strings.padStart("zs", 2, '*'));//zs
    System.out.println(Strings.padStart("zs", 3, '*'));//*zs
    
    //padEnd:为达到固定长度,在字符串结尾补全某字符
    System.out.println(Strings.padEnd("zs", 1, '*'));//zs,需要注意,这里不会返回s
    System.out.println(Strings.padEnd("zs", 2, '*'));//zs
    System.out.println(Strings.padEnd("zs", 3, '*'));//zs*
    
    //repeat:重复某字符串若干次,并拼接在一起
    System.out.println(Strings.repeat("zs", 2));//zszs
    System.out.println(Strings.repeat("java", 3));//javajavajava
}

三、连接器 Joiner

1、代码实例

用分隔符将多个字符串(或数组元素)连接成一个字符串。

常用方法如下:

  1. on:用符号分隔
  2. splitToList:分隔为list
  3. omitEmptyStrings:去掉分隔后的空格
  4. trimResults():去除每一行的空格 
  5. trimResults(CharMatcher.JAVA_DIGIT):去掉每一行的数字
private static void test05() {
    String str = "zs,,ls,     ww,,,gr";
    // 逗号分隔转为list
    System.out.println(Splitter.on(",").splitToList(str));//[zs, , ls,      ww, , , gr]

    // 去掉分隔后的空格
    System.out.println(Splitter.on(",").omitEmptyStrings().splitToList(str));//[zs, ls,      ww, gr]

    // 去除每一行的空格
    System.out.println(Splitter.on(",").omitEmptyStrings().trimResults().splitToList(str));//[zs, ls, ww, gr]

    String str2 = "zs,,ls2,     ww,,,zs";
    System.out.println(Splitter.on(",").omitEmptyStrings().trimResults().splitToList(str2));//[zs, ls2, ww, zs]
    // 去掉每一行指定的字符
    System.out.println(Splitter.on(",").omitEmptyStrings().trimResults(CharMatcher.javaDigit()).splitToList(str2));//[zs, ls,      ww, zs]

    // 既想去掉空格又想去掉数字,,,只去掉了数字
    System.out.println(Splitter.on(",").omitEmptyStrings().trimResults().trimResults(CharMatcher.javaDigit()).splitToList(str2));//[zs, ls,      ww, zs]
    // 既想去掉空格又想去掉数字,,,只去掉了空格,,感觉trimResults不能连续使用,如果连续只会选择最后一个有效?
    System.out.println(Splitter.on(",").omitEmptyStrings().trimResults(CharMatcher.javaDigit()).trimResults().splitToList(str2));//[zs, ls2, ww, zs]

    /**
     * on :map item之间分隔符
     withKeyValueSeparator:定义map项的分隔符
     */
    //转为指定格式字符串
    System.out.println(Joiner.on(";").withKeyValueSeparator("=").join(ImmutableMap.of("id", "1", "name", "zs")));//id=1;name=zs

    //指定格式字符串转为map
    System.out.println(Splitter.on(";").withKeyValueSeparator("=").split("id=1;name=zs"));//{id=1, name=zs}
}

2、连接器 Joiner 小测试

小练习:

需求:

①有一个[1, , 2, null, 3]

②按逗号分隔,并去掉null和""

private static List<String> makeList() {
    List<String> list = new ArrayList<String>();
    list.add("1");
    list.add("");
    list.add("2");
    list.add(null);
    list.add("3");
    return list;//[1, , 2, null, 3]
}

static String delimiter = ",";
//循环方式
private static void test01() {
    List<String> list = makeList();
    StringBuilder builder = new StringBuilder();
    for(String str : list) {
        if(StringUtils.isNotEmpty(str)) {
            builder.append(str+delimiter);
        }
    }
    System.out.println(builder);//1,2,3,
    builder.setLength(builder.length() - delimiter.length());
    System.out.println(builder);//1,2,3
}

//Java8 stream方式
private static void test02() {
    List<String> list = makeList();

    System.out.println(list.stream().filter(x -> StringUtils.isNotEmpty(x)).collect(Collectors.joining(",")));//1,2,3

    System.out.println(list.stream().filter(StringUtils::isNotEmpty).collect(Collectors.joining(",")));//1,2,3
}

//Guava Joiner
private static void test03() {
    List<String> list = makeList();
    System.out.println(Joiner.on(",").join(list));//java.lang.NullPointerException

    System.out.println(Joiner.on(",").join(list.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList())));//1,2,3
}

// java.lang
private static void test04() {
    List<String> list = makeList();
    System.out.println(String.join(",", list.stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList())));//1,2,3
}

四、CharMatcher

常用方法如下:

  1. javaDigit:数字
  2. javaLowerCase:小写
  3. javaUpperCase:大写
  4. whitespace:空格
  5. matches:匹配,返回Boolean
  6. removeFrom:移除指定类型
  7. retainFrom:除指定字符外全部移除
private static void test06() {
    //判断是否是数字类型
    System.out.println(CharMatcher.javaDigit().matches('1'));//true

    System.out.println(CharMatcher.javaDigit().matches('z'));//false

    //将某字符串的数字部分替换为某字符
    System.out.println(CharMatcher.javaDigit().replaceFrom("hello world666", "1"));//hello world111

    //javaLowerCase:小写
    System.out.println(CharMatcher.javaLowerCase().matches('a'));//true
    System.out.println(CharMatcher.javaLowerCase().matches('A'));//false

    //javaUpperCase:大写
    System.out.println(CharMatcher.javaUpperCase().matches('a'));//false
    System.out.println(CharMatcher.javaUpperCase().matches('A'));//true

    //移除空格
    System.out.println(CharMatcher.whitespace().removeFrom("hello world666"));//helloworld666

    //移除数字
    System.out.println(CharMatcher.javaDigit().removeFrom("hello world666"));//hello world

    //移除小写字母
    System.out.println(CharMatcher.javaLowerCase().removeFrom("hello worldAAA666"));//  AAA666

    //移除小写字母或数字
    System.out.println(CharMatcher.javaLowerCase().or(CharMatcher.javaDigit()).removeFrom("hello worldAAA666"));// AAA

    //除指定字符外全部移除
    System.out.println(CharMatcher.javaUpperCase().retainFrom("hello worldAAA666"));//AAA

    //判断某字符串包含几个某字符
    System.out.println(CharMatcher.is('o').countIn("hello world"));//2

    //去掉连续空格,并用指定字符替换空格
    System.out.println(CharMatcher.whitespace().trimAndCollapseFrom("hello world    AAA666", ' '));//hello world AAA666

    System.out.println(CharMatcher.whitespace().trimAndCollapseFrom("hello world    AAA666", '*'));//hello*world*AAA666
}

五、指定字符串格式转换

private static void test07() {
    //hyphen 连字符;camel 骆驼
    System.out.println(CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, "user-name")); //userName
    //underscore 下划线
    System.out.println(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "user_name")); //userName

    System.out.println(CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "user_name")); //UserName


    System.out.println(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "USER_name_zz")); //UserNameZz

    /**
     * 感觉前面的LOWER_UNDERSCORE或者UPPER_UNDERSCORE,,都是一样的,,暂时不懂为什么
     */
    System.out.println(CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "USER_name_ZZ-DD")); //UserNameZz-dd

    System.out.println(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "USER_name_ZZ-DD")); //UserNameZz-dd
}

 

往期精彩内容:

Java知识体系总结

Spring框架总结

超详细的springBoot学习笔记

常见数据结构与算法整理总结

Java设计模式:23种设计模式全面解析

Java面试题总结(附答案)

Linux知识体系总结

Redis知识体系总结

 

 

 

 

以上是关于Java常用工具类汇总 2Google核心库GUAVA(附代码示例)的主要内容,如果未能解决你的问题,请参考以下文章

前端常用插件工具类库汇总(下)

置顶文章-波波烤鸭博客文章汇总篇Java核心,经典开源框架应用及源码分析,企业级解决方案等强烈建议收藏!!!

置顶文章-波波烤鸭博客文章汇总篇Java核心,经典开源框架应用及源码分析,企业级解决方案等强烈建议收藏!!!

开源java游戏框架libgdx专题-11-核心库-演员类

你常用的Java工具库有哪些

吐血整理:C++编程语言资源汇总