一、标准库中的字符串处理类
1. StringJoiner
(Java 8+)
- 用途:用于在拼接字符串时自动添加分隔符、前缀和后缀。
- 示例:
StringJoiner sj = new StringJoiner(", ", "[", "]"); sj.add("A").add("B").add("C"); System.out.println(sj.toString()); // 输出:[A, B, C]
- 适用场景:集合元素拼接、日志格式化等。
2. StringTokenizer
(旧版类)
- 用途:分割字符串(类似
String.split()
,但性能更高,功能更简单)。 - 示例:
StringTokenizer st = new StringTokenizer("Hello,World,Java", ","); while (st.hasMoreTokens()) {System.out.println(st.nextToken()); }
- 注意:Java 5+ 推荐使用
String.split()
或正则表达式。
3. CharArrayWriter
- 用途:将字符写入内存缓冲区(基于
char[]
),最后转换为字符串。 - 示例:
CharArrayWriter writer = new CharArrayWriter(); writer.write("Hello"); writer.write(" World"); String result = writer.toString(); // Hello World
- 适用场景:替代
StringBuilder
处理字符流。
4. CharBuffer
(NIO 类)
- 用途:用于高效处理字符缓冲区的读写操作,支持内存映射等高级特性。
- 示例:
CharBuffer buffer = CharBuffer.allocate(100); buffer.put("Hello").flip(); String s = buffer.toString(); // Hello
- 适用场景:高性能 I/O 或大规模字符处理。
二、字符串工具方法(String
类的扩展)
1. String.format()
和 System.out.printf()
- 用途:格式化字符串(类似 C 语言的
printf
)。 - 示例:
String s = String.format("Name: %s, Age: %d", "Alice", 30);
2. String.join()
(Java 8+)
- 用途:用分隔符拼接字符串集合。
- 示例:
List<String> list = List.of("A", "B", "C"); String joined = String.join(" | ", list); // A | B | C
3. String.repeat()
(Java 11+)
- 用途:重复字符串多次。
- 示例:
String s = "Java".repeat(3); // JavaJavaJava
4. 文本块(Text Blocks,Java 15+)
- 用途:简化多行字符串的定义。
- 示例:
String json = """{"name": "Alice","age": 30}""";
三、正则表达式相关类
1. Pattern
和 Matcher
- 用途:通过正则表达式匹配、替换或分割字符串。
- 示例:
Pattern pattern = Pattern.compile("\\d+"); Matcher matcher = pattern.matcher("abc123def"); while (matcher.find()) {System.out.println(matcher.group()); // 123 }
四、第三方库工具
1. Apache Commons Lang - StringUtils
- 常用方法:
StringUtils.isEmpty(str); // 判空 StringUtils.join(list, ","); // 拼接集合 StringUtils.substringBetween(str, "[", "]"); // 提取子串
- 依赖:需引入
commons-lang3
。
2. Guava - Strings
- 常用方法:
Strings.padStart("Java", 6, ' '); // " Java" Strings.nullToEmpty(str); // 将 null 转为空字符串
五、底层优化特性
Compact Strings(Java 9+)
- 改进:
String
内部存储从char[]
改为byte[]
,根据字符编码(Latin-1 或 UTF-16)动态优化内存占用。 - 效果:减少内存消耗,尤其对纯英文字符串(节省约 50% 内存)。
总结
Java 中处理字符串的方式多样,可根据场景选择:
场景 | 推荐工具 |
---|---|
简单拼接 | String 或 + 操作符(编译器优化) |
高频修改 | StringBuilder (单线程) |
多线程安全修改 | StringBuffer (锁消除优化后接近) |
格式化拼接 | StringJoiner 或 String.format() |
集合拼接 | String.join() 或 Stream API |
复杂文本处理 | 正则表达式(Pattern /Matcher ) |
高性能 I/O 或缓冲区操作 | CharBuffer (NIO) |
多行字符串 | 文本块(Java 15+) |
对于第三方库,可根据项目需求选择 StringUtils
(Apache)或 Strings
(Guava)简化代码。