告别StringUtils!Guava字符串工具类 Strings、Splitter与Joiner 3分钟上手指南
【免费下载链接】guava Google core libraries for Java 项目地址: 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库)提供的Strings、Splitter和Joiner类通过流畅的API设计,将这些操作简化为一行代码。
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.format | Strings.padStart(Strings.nullToEmpty(str), 10, '0') | 3行+ | 1行 |
总结与最佳实践
Guava的Strings、Splitter和Joiner类通过流畅的API设计,大幅简化了字符串处理逻辑。最佳实践:
- 静态导入常用方法:
import static com.google.common.base.Strings.*; - 预定义拆分器和拼接器为常量,避免重复创建:
private static final Splitter COMMA_SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings(); private static final Joiner COMMA_JOINER = Joiner.on(',').skipNulls(); - 处理用户输入时使用
Splitter的trimResults()移除首尾空格 - 日志输出时使用
Joiner拼接集合,避免NullPointerException
完整API文档:Guava官方文档
掌握这些工具类,让你的字符串处理代码更简洁、更健壮、更易维护!立即在项目中引入Guava库,体验Google工程师的编码智慧吧!
点赞+收藏,下次处理字符串直接抄作业!关注我,获取更多Guava实用技巧~ 下一期:《Guava集合工具类:让Java集合操作飞起来》
项目源码地址:GitHub_Trending/gua/guava
【免费下载链接】guava Google core libraries for Java 项目地址: https://gitcode.com/GitHub_Trending/gua/guava
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



