告别StringUtils!Guava字符串工具类 Strings、Splitter与Joiner 3分钟上手指南

告别StringUtils!Guava字符串工具类 Strings、Splitter与Joiner 3分钟上手指南

【免费下载链接】guava Google core libraries for Java 【免费下载链接】guava 项目地址: https://gitcode.com/GitHub_Trending/gua/guava

你还在为Java字符串处理写大量重复代码?用String.split()处理空值时崩溃?拼接列表时手动判空?本文3分钟带你掌握Google Guava库的三大字符串工具类,彻底解决这些痛点!读完你将学会:

  • Strings:一行代码搞定null安全处理与字符串填充
  • Splitter:灵活拆分字符串,轻松处理空值与分隔符
  • Joiner:优雅拼接集合与Map,告别冗长循环

为什么选择Guava字符串工具?

Java原生字符串API存在诸多痛点:String.split()不支持空值过滤,手动拼接集合需要冗长的循环和判空,处理null值时容易抛出NullPointerException。Guava(Google核心Java库)提供的StringsSplitterJoiner类通过流畅的API设计,将这些操作简化为一行代码。

官方源码参考:guava/src/com/google/common/base/

Strings工具类:null安全与字符串操作

Strings类提供了null安全的字符串处理方法,避免繁琐的if (str == null)判断。

核心方法速查表

方法功能示例
nullToEmpty(String)null转空字符串null → ""
emptyToNull(String)空字符串转null"" → null
isNullOrEmpty(String)判断null或空字符串null/"", "" → true
padStart(String, int, char)左侧填充字符padStart("7", 3, '0') → "007"
padEnd(String, int, char)右侧填充字符padEnd("4.", 5, '0') → "4.000"
repeat(String, int)重复字符串repeat("ab", 3) → "ababab"

实战示例:格式化用户手机号

String phone = null;
// null安全处理:null → "未知"
String safePhone = Strings.nullToEmpty(phone);
// 格式化:不足11位则左侧补0
String formatted = Strings.padStart(safePhone, 11, '0');
// 结果:"00000000000"(当phone为null时)

源码实现参考:Strings.java

Splitter:灵活强大的字符串拆分器

Splitter解决了String.split()的局限性,支持按字符、字符串、正则表达式拆分,并可配置空值过滤和结果修剪。

基础用法:拆分逗号分隔的字符串

// 拆分字符串并自动过滤空值和修剪空格
List<String> parts = Splitter.on(',')
    .trimResults()       // 修剪每个元素的前后空格
    .omitEmptyStrings()  // 忽略空字符串
    .splitToList(" apple, ,banana,  orange ");
// 结果:["apple", "banana", "orange"]

高级特性:限制拆分次数

// 最多拆分为2个部分
List<String> limited = Splitter.on('/')
    .limit(2)
    .splitToList("a/b/c/d");
// 结果:["a", "b/c/d"]

按固定长度拆分

// 按2个字符拆分
List<String> fixed = Splitter.fixedLength(2)
    .splitToList("abcdef");
// 结果:["ab", "cd", "ef"]

源码实现参考:Splitter.java

Joiner:优雅拼接集合与Map

Joiner用于将集合、数组或Map拼接为字符串,支持处理null值和自定义分隔符。

拼接集合(忽略null值)

List<String> fruits = Arrays.asList("apple", null, "banana", "orange");
String result = Joiner.on(", ")
    .skipNulls()  // 跳过null元素
    .join(fruits);
// 结果:"apple, banana, orange"

拼接集合(替换null值)

String result = Joiner.on(", ")
    .useForNull("unknown")  // null替换为"unknown"
    .join(fruits);
// 结果:"apple, unknown, banana, orange"

拼接Map键值对

Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 90);
scores.put("Bob", 85);

String result = Joiner.on("; ")
    .withKeyValueSeparator("=")  // 键值分隔符
    .join(scores);
// 结果:"Alice=90; Bob=85"

源码实现参考:Joiner.java

实战案例:日志格式化与数据解析

案例1:格式化用户标签(Joiner应用)

// 用户标签集合
Set<String> tags = user.getTags();
// 拼接为"标签1, 标签2, 标签3"格式,null标签显示为"未分类"
String tagStr = Joiner.on(", ")
    .useForNull("未分类")
    .join(tags);
// 用于日志输出
logger.info("User tags: " + tagStr);

案例2:解析CSV数据(Splitter应用)

String csv = "  id,name,age  \n  1,Alice,30  \n  2,Bob,  \n  3,,25";
List<List<String>> rows = new ArrayList<>();

// 按行拆分后,再按逗号拆分,跳过空行和空格
Splitter.on('\n')
    .trimResults()
    .omitEmptyStrings()
    .split(csv)
    .forEach(line -> {
        List<String> columns = Splitter.on(',')
            .trimResults()
            .splitToList(line);
        rows.add(columns);
    });
// 结果:[[id, name, age], [1, Alice, 30], [2, Bob, ""], [3, "", 25]]

性能对比:Guava vs 原生API

操作原生API实现Guava实现代码量可读性
拆分并过滤空值需要循环+判空Splitter.on(',').omitEmptyStrings().split()5行+1行
拼接集合循环+StringBuilder+判空Joiner.on(',').skipNulls().join(list)8行+1行
null安全的字符串填充if (str == null) + String.formatStrings.padStart(Strings.nullToEmpty(str), 10, '0')3行+1行

总结与最佳实践

Guava的StringsSplitterJoiner类通过流畅的API设计,大幅简化了字符串处理逻辑。最佳实践:

  1. 静态导入常用方法:import static com.google.common.base.Strings.*;
  2. 预定义拆分器和拼接器为常量,避免重复创建:
    private static final Splitter COMMA_SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings();
    private static final Joiner COMMA_JOINER = Joiner.on(',').skipNulls();
    
  3. 处理用户输入时使用SplittertrimResults()移除首尾空格
  4. 日志输出时使用Joiner拼接集合,避免NullPointerException

完整API文档:Guava官方文档

掌握这些工具类,让你的字符串处理代码更简洁、更健壮、更易维护!立即在项目中引入Guava库,体验Google工程师的编码智慧吧!


点赞+收藏,下次处理字符串直接抄作业!关注我,获取更多Guava实用技巧~ 下一期:《Guava集合工具类:让Java集合操作飞起来》

项目源码地址:GitHub_Trending/gua/guava

【免费下载链接】guava Google core libraries for Java 【免费下载链接】guava 项目地址: https://gitcode.com/GitHub_Trending/gua/guava

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值