场景
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