Google Guava 字符串工具使用详解

文章目录

  • 字符串工具
    • [- Strings](#- Strings)
    • [- Joiner](#- Joiner)
    • [- Splitter](#- Splitter)
    • [- CharMatcher](#- CharMatcher)
    • [- CaseFormat](#- CaseFormat)

字符串工具

工具类 描述
Strings 用于对字符串进行各种操作,例如判空、拼接、截取、填充等
Joiner 用于将多个元素连接成一个字符串,并且可以指定连接符和处理null值的方式
Splitter 用于将一个字符串分割成多个部分,可以指定分隔符和分割结果的处理方式
CharMatcher 用于对字符进行匹配和操作
CaseFormat 用于不同命名格式之间的转换,例如驼峰命名、大写下划线命名、小写连字符命名等

- Strings

Strings类提供了一系列静态方法,用于对字符串进行各种操作,例如判空、拼接、截取、填充等。

主要方法:

方法 描述
isNullOrEmpty(String) 判断字符串是否为null或空字符串。
emptyToNull(String) 将空字符串转换为null。
nullToEmpty(String) 将null转换为空字符串。
repeat(String, int) 指定字符串重复次数。
padStart(String, int, char) 在字符串的开头填充指定字符到指定长度。
padEnd(String, int, char) 在字符串的结尾填充指定字符到指定长度。
commonPrefix(CharSequence, CharSequence) 获取两个字符串的最长公共前缀。
commonSuffix(CharSequence, CharSequence) 获取两个字符串的最长公共后缀。

使用示例:

java 复制代码
    public static void main(String[] args) {
        boolean b1 = Strings.isNullOrEmpty("");
        System.out.println("字符串是否为null或空字符串:" +b1);

        String b2 = Strings.emptyToNull("aa");
        System.out.println("将空字符串转换为null:" +b2);

        String b3 = Strings.emptyToNull("");
        System.out.println("将空字符串转换为null:" +b3);

        String b4 = Strings.repeat("123", 5);
        System.out.println("指定字符串重复次数:" +b4);

        String b5 = Strings.padStart("99", 5, '0');
        System.out.println("在字符串的开头填充指定字符到指定长度:" +b5);

        String b6 = Strings.padEnd("99", 5, '0');
        System.out.println("在字符串的结尾填充指定字符到指定长度:" +b6);

        String b7 = Strings.commonPrefix("abc666", "ab1555");
        System.out.println("获取两个字符串的最长公共前缀:" +b7);

        String b8 = Strings.commonSuffix("sds", "dfh345sds");
        System.out.println("获取两个字符串的最长公共后缀:" +b8);
    }

日志

java 复制代码
字符串是否为null或空字符串:true
将空字符串转换为null:aa
将空字符串转换为null:null
指定字符串重复次数:123123123123123
在字符串的开头填充指定字符到指定长度:00099
在字符串的结尾填充指定字符到指定长度:99000
获取两个字符串的最长公共前缀:ab
获取两个字符串的最长公共后缀:sds

- Joiner

Joiner类用于将多个元素连接成一个字符串,并且可以指定连接符和处理null值的方式。

主要方法:

方法 描述
on(char) 指定分隔符。
join(Iterable) 将可迭代对象中的元素连接成一个字符串。
join(Object[]) 将对象数组连接成一个字符串。
join(Object...) 将多个对象连接成一个字符串。
skipNulls() 忽略null值。
useForNull(String) 指定在连接过程中将null值替换为指定字符串。

使用示例:

java 复制代码
    public static void main(String[] args) {
        String s1 = Joiner.on(",").join(Arrays.asList("A", "B", "C"));
        System.out.println("将可迭代对象中的元素连接成一个字符串:"+s1);

        String s2 = Joiner.on(",").join(Stream.of("A", "B", "C").toArray());
        System.out.println("将数组连接成一个字符串:"+s2);

        String s3 = Joiner.on(",").join("A", "B", "C");
        System.out.println("将可变参数连接成一个字符串:"+s3);

        String s4 = Joiner.on(",").useForNull("666").join("A", "B", null, "C");
        System.out.println("连接过程将null值替换为指定字符串:"+s4);

        String s5 = Joiner.on(",").skipNulls().join("A", "B", null, "C");
        System.out.println("连接过程忽略null值:"+s5);
    }

日志

java 复制代码
已连接到目标 VM, 地址: ''127.0.0.1:56398',传输: '套接字''
将可迭代对象中的元素连接成一个字符串:A,B,C
将数组连接成一个字符串:A,B,C
将可变参数连接成一个字符串:A,B,C
连接过程将null值替换为指定字符串:A,B,666,C
连接过程忽略null值:A,B,C

- Splitter

Splitter类用于将一个字符串分割成多个部分,可以指定分隔符和分割结果的处理方式。

主要方法:

方法 描述
on(char separator) 指定单个字符作为分隔符。
on(CharMatcher separatorMatcher) 使用 CharMatcher 指定分隔符。
on(final String separator) 指定字符串作为分隔符。
on(Pattern separatorPattern) 使用正则表达式指定分隔符进行分割。
onPattern(String separatorPattern) 使用正则表达式指定分隔符进行分割。
omitEmptyStrings() 忽略结果中的空字符串。
trimResults() 去除结果字符串的前导和尾部空白字符。
trimResults(CharMatcher trimmer) 使用 CharMatcher 去除结果字符串的前导和尾部空白字符。
limit(int) 限制分割的结果数量。
withKeyValueSeparator(String separator) 用于指定键值对的分隔符。
withKeyValueSeparator(char separator) 用于指定键值对的分隔符。
withKeyValueSeparator(Splitter keyValueSplitter) 用于指定键值对的分隔符。
split(final CharSequence sequence) 将字符序列分割为多个部分。
splitToList(CharSequence sequence) 将字符序列分割为列表形式的结果。
splitToStream(CharSequence sequence) 将字符序列分割为流形式的结果。

使用示例:

java 复制代码
    public static void main(String[] args) {
        // 指定逗号作为分隔符,并忽略空字符串和去除前导和尾部空白字符
        String input = "apple, banana, ,orange,  ";
        Iterable<String> result = Splitter.on(',')
                .omitEmptyStrings()
                .trimResults()
                .split(input);
        for (String s : result) {
            System.out.println(s);
        }
        System.out.println("------------------------------------------");
        // 使用正则表达式作为分隔符,并将字符串分割为数字部分和非数字部分
        input = "a1b2c3d4e5";
        result = Splitter.onPattern("\\d")
                .split(input);
        for (String s : result) {
            System.out.println(s);
        }
    }

日志

java 复制代码
apple
banana
orange
------------------------------------------
a
b
c
d
e

- CharMatcher

CharMatcher类用于对字符进行匹配和操作。

主要方法:

方法 描述
anyOf(String chars) 匹配给定字符串中的任意字符。
inRange(char startInclusive, char endInclusive) 匹配在给定范围内的字符。
is(char match) 匹配与给定字符相同的字符。
isNot(char match) 匹配与给定字符不同的字符。
whitespace() 匹配空白字符。
collapseFrom(CharSequence sequence, char replacement) 将匹配的字符替换为给定的字符。
retainFrom(CharSequence sequence) 保留匹配的字符,删除其他字符。
removeFrom(CharSequence sequence) 删除匹配的字符。
matchesAllOf(CharSequence sequence) 判断字符序列是否完全匹配 CharMatcher。
countIn(CharSequence sequence) 统计字符序列中匹配的字符数量。
trimFrom(CharSequence sequence) 删除字符序列开头和结尾的匹配字符。
trimLeadingFrom(CharSequence sequence) 删除字符序列开头的匹配字符。
trimTrailingFrom(CharSequence sequence) 删除字符序列结尾的匹配字符。
replaceFrom(CharSequence sequence, char replacement) 将匹配的字符替换为给定的字符。
trimAndCollapseFrom(CharSequence sequence, char replacement) 删除字符序列开头和结尾的匹配字符,并将连续的匹配字符替换为给定的字符。
replaceFrom(CharSequence sequence, char replacement) 将匹配的字符替换为给定的字符。
matchesNoneOf(CharSequence sequence) 判断字符序列是否没有匹配 CharMatcher。
indexIn(CharSequence sequence) 返回第一个匹配字符的索引。
indexOf(CharSequence sequence, int start) 返回从指定索引开始的第一个匹配字符的索引。
lastIndexIn(CharSequence sequence) 返回最后一个匹配字符的索引。
or(CharMatcher other) 返回一个新的 CharMatcher,其匹配条件是原始 CharMatcher 和另一个 CharMatcher 条件的逻辑或关系。
and(CharMatcher other) 返回一个新的 CharMatcher,其匹配条件是原始 CharMatcher 和另一个 CharMatcher 条件的逻辑与关系。
negate() 返回一个新的 CharMatcher,其匹配条件是原始 CharMatcher 的否定。

使用示例:

java 复制代码
    public static void main(String[] args) {
        String testString = "abc 123 def 456 ghi 789";

        // 匹配给定字符串中的任意字符
        CharMatcher anyOfMatcher = CharMatcher.anyOf("aeiou");
        System.out.println(anyOfMatcher.removeFrom(testString)); // 输出 bc 123 df 456 gh 789

        // 匹配在给定范围内的字符
        CharMatcher inRangeMatcher = CharMatcher.inRange('a', 'f');
        System.out.println(inRangeMatcher.removeFrom(testString)); // 输出 def 456 ghi 789

        // 匹配与给定字符相同的字符
        CharMatcher isMatcher = CharMatcher.is('o');
        System.out.println(isMatcher.countIn(testString)); // 输出 0

        // 匹配与给定字符不同的字符
        CharMatcher isNotMatcher = CharMatcher.isNot(' ');
        System.out.println(isNotMatcher.removeFrom(testString)); // 输出 abc123def456ghi789

        // 匹配空白字符
        CharMatcher whitespaceMatcher = CharMatcher.whitespace();
        System.out.println(whitespaceMatcher.trimFrom(testString)); // 输出 "abc 123 def 456 ghi 789"

        // 将匹配的字符替换为给定的字符
        CharMatcher digitMatcher = CharMatcher.digit();
        System.out.println(digitMatcher.replaceFrom(testString, '*')); // 输出 "abc *** def *** ghi ***"

        // 统计字符序列中匹配的字符数量
        CharMatcher anyMatcher = CharMatcher.any();
        System.out.println(anyMatcher.countIn(testString)); // 输出 20

        // 删除字符序列开头和结尾的匹配字符
        CharMatcher trimMatcher = CharMatcher.is(' ');
        System.out.println(trimMatcher.trimFrom(testString)); // 输出 "abc 123 def 456 ghi 789"

        // 删除字符序列开头的匹配字符
        CharMatcher leadingMatcher = CharMatcher.is('a');
        System.out.println(leadingMatcher.trimLeadingFrom(testString)); // 输出 "bc 123 def 456 ghi 789"

        // 删除字符序列结尾的匹配字符
        CharMatcher trailingMatcher = CharMatcher.is('9');
        System.out.println(trailingMatcher.trimTrailingFrom(testString)); // 输出 "abc 123 def 456 ghi 78"

        // 将匹配的字符替换为给定的字符
        CharMatcher replaceMatcher = CharMatcher.anyOf("aeiou");
        System.out.println(replaceMatcher.replaceFrom(testString, '*')); // 输出 "*b*c 123 d*f 456


        // 将字符序列中的多个连续匹配字符缩减为一个字符
        CharMatcher duplicateMatcher = CharMatcher.is(' ');
        String collapsedString = duplicateMatcher.collapseFrom(testString, ' ');
        System.out.println(collapsedString); // 输出 "abc 123 def 456 ghi 789"

        // 判断字符序列是否不包含任何匹配字符
        System.out.println(whitespaceMatcher.matchesNoneOf(testString)); // 输出 false
    }

日志:

java 复制代码
bc 123 df 456 gh 789
 123  456 ghi 789
0
     
abc 123 def 456 ghi 789
abc *** def *** ghi ***
23
abc 123 def 456 ghi 789
bc 123 def 456 ghi 789
abc 123 def 456 ghi 78
*bc 123 d*f 456 gh* 789
abc 123 def 456 ghi 789
false

- CaseFormat

CaseFormat类用于不同命名格式之间的转换,例如驼峰命名、大写下划线命名、小写连字符命名等。

CaseFormat 支持的命名约定和格式包括:

  • LOWER_CAMEL:首字母小写驼峰命名
  • UPPER_CAMEL:首字母大写驼峰命名
  • LOWER_UNDERSCORE:下划线小写命名
  • UPPER_UNDERSCORE:下划线大写命名
  • LOWER_HYPHEN:连字符小写命名

主要方法:

方法名 描述
String to(CaseFormat format, String str) 将给定格式的字符串转换为另一种格式

使用示例:

java 复制代码
    public static void main(String[] args) {
        // 首字母小写驼峰 转换为 下划线大写
        String s1 = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, "userId");
        System.out.println(s1);

        // 下划线大写 转换为 连字符小写
        String s2 = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, "USER_ID");
        System.out.println(s2);

       // 连字符小写 转换为 首字母大写驼峰
        String s3 = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, "user-id");
        System.out.println(s3);

    }

日志

java 复制代码
USER_ID
user-id
UserId
相关推荐
汇匠源2 分钟前
共享无人系统,从出行到生活全面覆盖
java·生活
小灰灰要减肥1 小时前
装饰者模式
java
张铁铁是个小胖子1 小时前
MyBatis学习
java·学习·mybatis
Yan.love2 小时前
开发场景中Java 集合的最佳选择
java·数据结构·链表
椰椰椰耶2 小时前
【文档搜索引擎】搜索模块的完整实现
java·搜索引擎
大G哥2 小时前
java提高正则处理效率
java·开发语言
智慧老师2 小时前
Spring基础分析13-Spring Security框架
java·后端·spring
lxyzcm2 小时前
C++23新特性解析:[[assume]]属性
java·c++·spring boot·c++23
V+zmm101343 小时前
基于微信小程序的乡村政务服务系统springboot+论文源码调试讲解
java·微信小程序·小程序·毕业设计·ssm
Oneforlove_twoforjob3 小时前
【Java基础面试题025】什么是Java的Integer缓存池?
java·开发语言·缓存