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
相关推荐
期待のcode11 小时前
MyBatisX插件
java·数据库·后端·mybatis·springboot
醇氧13 小时前
【Windows】优雅启动:解析一个 Java 服务的后台启动脚本
java·开发语言·windows
sunxunyong14 小时前
doris运维命令
java·运维·数据库
菜鸟起航ing14 小时前
Spring AI 全方位指南:从基础入门到高级实战
java·人工智能·spring
古城小栈14 小时前
Docker 多阶段构建:Go_Java 镜像瘦身运动
java·docker·golang
MapGIS技术支持14 小时前
MapGIS Objects Java计算一个三维点到平面的距离
java·开发语言·平面·制图·mapgis
Coder_Boy_14 小时前
业务导向型技术日志首日记录(业务中使用的技术栈)
java·驱动开发·微服务
盖世英雄酱5813615 小时前
springboot 项目 从jdk 8 升级到jdk21 会面临哪些问题
java·后端
济南壹软网络科技有限公司16 小时前
企业级盲盒系统:Java高并发架构在多元化抽奖电商中的设计与实践
java·架构·开源源码·盲盒源码·盲盒h5·盲盒app
廋到被风吹走16 小时前
【Java】常用设计模式及应用场景详解
java·开发语言·设计模式