Java核心工具库Guava介绍以及Optional和Preconditions使用进行非空和数据校验:
Java核心工具库Guava介绍以及Optional和Preconditions使用进行非空和数据校验_霸道流氓气质的博客-CSDN博客
在上面入门Guava的使用之后,学习其对字符串处理的相关方法的示例。
用分隔符把字符串序列连接起来也可能会遇上不必要的麻烦。如果字符串序列中含有 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领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
JDK 内建的字符串拆分工具有一些古怪的特性。比如,String.split 悄悄丢弃了尾部的分隔符。
问题:”,a,,b,”.split(“,”)返回?
String string = ",a,,b,";String[] split = string.split(",");System.out.println(split.length);//4Arrays.stream(split).forEach(System.out::println);
正确答案是 ””, “a”, “”, “b”。只有尾部的空字符串被忽略了
1、splitter使用令人放心的、直白的流畅 API 模式对这些混乱的特性作了完全的掌控。
Iterable 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 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)限制拆分出的字符串数量
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针对所有 Java 平台都要保证支持的六种字符集提供了常量引用。
尝试使用这些常量,而不是通过名称获取字符集实例。
byte[] bytes = "aaaaadg".getBytes(StandardCharsets.UTF_8);
CaseFormat 被用来方便地在各种 ASCII 大小写规范间转换字符串——比如,编程语言的命名规范
String badao = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "BADAO");System.out.println(badao);//badao