0
点赞
收藏
分享

微信扫一扫

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


场景

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

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

在上面入门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}

注:

博客:
​霸道流氓气质的博客_博客-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

举报

相关推荐

0 条评论