一、標準庫中的字符串處理類
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)簡化代碼。