首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 字符串分割兩大核心 API 深度對比:String.split vs StringTokenizer

     編輯:Java 相關知識

方法一:String.split(String regex, int limit)(JDK 1.4+)

基於正則表達式,功能強大但需注意特殊字符轉義。

基本用法

String src = "1,2,3,4,5";
String[] arr = src.split(",");           // [1,2,3,4,5]
String[] arr3 = src.split(",", 3);       // 限制最多 3 段 → [1,2,3,4,5]

特殊字符轉義規則

多重分隔符

"Java string-split#test".split(" |-|#")  // 以空格、-、# 任一分割 → [Java, string, split, test]

方法二:StringTokenizer(JDK 1.0+,遺留類)

不支援正則,僅按單字符分隔,性能較高但功能受限。

基本用法

StringTokenizer st = new StringTokenizer("192.168.128.33", ".");
while (st.hasMoreTokens()) {
    System.out.print(st.nextToken() + " ");  // 192 168 128 33
}

關鍵差異:空 Token 處理

// 輸入 "192.168..33"
split(".")      → [192, 168, "", 33]  // 保留空段
StringTokenizer → [192, 168, 33]      // 自動忽略空段

警告:若業務依賴空段語義(如 CSV 空列),StringTokenizer 會導致數據丟失。

性能對比與選型建議

分隔符正則寫法說明
.\\.點號需雙轉義
|\\|管道符需轉義
*\\*星號需轉義
\\\\\反斜槓需四重轉義
維度String.splitStringTokenizer
算法複雜度O(m×n) 正則匹配O(n) 線性掃描
功能豐富度正則、限制段數、多重分隔符單字符分隔、無正則
空段保留是否(忽略)
推薦場景高頻、大數據量 ETL 解析 → StringTokenizer;通用業務、需正則 → split

現代替代方案

  • java.util.regex.Pattern 編譯複用:Pattern.compile(regex).split(input) 避免重複編譯
  • Apache Commons Lang StringUtils.split():非正則、高性能、空段可控
  • Java 8+ String.splitAsStream():流式處理,配合 Filter/Map 更優雅
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved