Java工具库Guava字符串处理:分割、连接、填充的使用示例

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 Java工具库Guava字符串处理:分割、连接、填充的使用示例,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

场景

Java核心工具库Guava介绍以及Optional和Preconditions使用进行非空和数据校验:

Java核心工具库Guava介绍以及Optional和Preconditions使用进行非空和数据校验_霸道流氓气质的博客-CSDN博客

在上面入门Guava的使用之后,学习其对字符串处理的相关方法的示例。

连接器Joiner

用分隔符把字符串序列连接起来也可能会遇上不必要的麻烦。如果字符串序列中含有 null,那连接操作会更难。

Fluent 风格的Joiner让连接字符串更简单。

1、skipNulls()方法 忽略 null

        Joiner joiner = Joiner.on("->").skipNulls();
        String join = joiner.join("北京", "上海", "广州", null, "深圳");
        System.out.println(join);//北京->上海->广州->深圳

2、useForNull(String)方法可以给定某个字符串来替换 null

        System.out.println(Joiner.on("->").useForNull("未知地点").join("北京", "上海", "广州", null, "深圳"));
        //北京->上海->广州->未知地点->深圳

3、Joiner 也可以用来连接对象类型,在这种情况下,它会把对象的 toString()值连接起来

        User user = User.builder().name("霸道").age(30).build();
        User user1 =  User.builder().name("的程序猿").age(40).build();
        String join1 = Joiner.on("+").join(user, user1);
        System.out.println(join1);//User{姓名= 霸道,年龄=30}+User{姓名=的程序猿, 年龄= 40}

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

关注公众号

霸道的程序猿

获取编程相关电子书、教程推送与免费下载。

拆分器Splitter

JDK 内建的字符串拆分工具有一些古怪的特性。比如,String.split 悄悄丢弃了尾部的分隔符。

问题:”,a,,b,”.split(“,”)返回?

        String string = ",a,,b,";
        String[] split = string.split(",");
        System.out.println(split.length);//4
        Arrays.stream(split).forEach(System.out::println);

正确答案是 ””, “a”, “”, “b”。只有尾部的空字符串被忽略了

1、splitter使用令人放心的、直白的流畅 API 模式对这些混乱的特性作了完全的掌控。

        Iterable<String> split1 = Splitter.on(',')
                .trimResults()//移除结果字符串的前导空白和尾部空白
                .omitEmptyStrings()//从结果中自动忽略空字符串
                .split(",a,,b,");
        System.out.println(split1.toString());//[a, b]

上述代码返回 Iterable,其中包含”a”和”b”。Splitter 可以被设置为按照任何模式、字符、字符串或字符匹配器拆分

2、如果想要拆分器返回List,只需要Lists.newArrayList(split1.iterator())

        ArrayList<String> strings = Lists.newArrayList(split1.iterator());
        strings.stream().forEach(System.out::println);

3、其他方法

        //拆分器工厂
        //Splitter.on(char)  按单个字符拆分
        //Splitter.on(CharMatcher) 按字符匹配器拆分
        //Splitter.on(String) 按字符串拆分
        //Splitter.onPattern(String) 按正则表达式拆分
        //Splitter.fixedLength(int) 按固定长度拆分;最后一段可能比给定长度短,但不会为空
       
        //拆分器修饰符
        //omitEmptyStrings()从结果中自动忽略空字符串
        //trimResults()移除结果字符串的前导空白和尾部空白
        //trimResults(CharMatcher)给定匹配器,移除结果字符串的前导匹配字符和尾部匹配字符
        //limit(int)限制拆分出的字符串数量

字符匹配器CharMatcher

1、removeFrom 从字符序列中移除所有匹配字符,比如移除control字符

        String s = CharMatcher.javaIsoControl().removeFrom("a\nbc\n");
        System.out.println(s);//abc

2、只保留数字字符

        String s1 = CharMatcher.digit().retainFrom("55ddd66gggg");
        System.out.println(s1);//5566

3、去除两端的空格,并把中间的连续空格替换成指定的字符

        String s2 = CharMatcher.whitespace().trimAndCollapseFrom("  dd   ggg  ", ',');
        System.out.println(s2);//dd,ggg

4、用指定字符替换所有数字

        String s3 = CharMatcher.javaDigit().replaceFrom("111ddd222ggg", ',');
        System.out.println(s3);//,,,ddd,,,ggg

5、只保留数字和小写字母

        String s4 = CharMatcher.javaDigit().or(CharMatcher.javaLowerCase()).retainFrom("aaDD11GG");
        System.out.println(s4);//aa11

6、anyOf枚举匹配字符

        String s6 = CharMatcher.is('a').retainFrom("aaddddgggxccv");
        System.out.println(s6);//aa

7、is给定单一字符匹配

        String s6 = CharMatcher.is('a').retainFrom("aaddddgggxccv");
        System.out.println(s6);//aa

8、inRange给定字符范围匹配

        String s7 = CharMatcher.inRange('a', 'h').retainFrom("abcdefghijk");
        System.out.println(s7);//abcdefgh

9、collapseFrom把每组连续的匹配字符替换成特定字符,比如把字符串中的连续空白字符替换成单个空格

        String s8 = CharMatcher.whitespace().collapseFrom("   aaafd   gdhdh", ' ');
        System.out.println(s8);// aaafd gdhdh

10、matchesAllOf 测试是否字符序列中的所有字符都匹配

        boolean b = CharMatcher.digit().matchesAllOf("55ddd66gggg");
        System.out.println(b);//false

11、trimFrom 移除字符序列的前导匹配字符和尾部匹配字符

        String s9 = CharMatcher.javaDigit().trimFrom("44ddd555ggg666");
        System.out.println(s9);//ddd555ggg

Charsets

Charsets针对所有 Java 平台都要保证支持的六种字符集提供了常量引用。
尝试使用这些常量,而不是通过名称获取字符集实例。

byte[] bytes = "aaaaadg".getBytes(StandardCharsets.UTF_8);

CaseFormat

CaseFormat 被用来方便地在各种 ASCII 大小写规范间转换字符串——比如,编程语言的命名规范

        String badao = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "BADAO");
        System.out.println(badao);//badao

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135860.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!