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

Java 字串分割實戰:split() 與 StringTokenizer 兩大核心方案深度解析

     編輯:Java 程式設計入門

前言

字串分割是 Java 開發中高頻操作。標準庫提供了 String.split() 與 StringTokenizer 兩種主要方式,兩者在效能、功能與適用場景上存在顯著差異。本文透過完整代碼範例,深度剖析兩者特性與最佳實踐。

方案一:String.split() - 正則表達式分割

import java.util.Arrays;

public class TestSplit {
    public static void main(String[] args) {
        String originString = "5,8,7,4,3,9,1";
        String[] testString = originString.split(",");
        int[] test = new int[testString.length];

        // 字串轉整數
        for (int i = 0; i < testString.length; i++) {
            test[i] = Integer.parseInt(testString[i]);
        }

        // 升序排序
        Arrays.sort(test);
        for (int j = 0; j < test.length; j++) {
            System.out.println(test[j]);
        }
        System.out.println("next ");

        // 降序輸出
        for (int i = test.length - 1; i >= 0; i--) {
            System.out.println(test[i]);
        }
    }
}

核心特性

  • 基於正則表達式:支援複雜分隔符模式(如 split("\\s*,\\s*") 處理帶空白的逗號)
  • 回傳陣列:直接獲得 String[],便於串流處理與集合轉換
  • 效能考量:每次調用編譯正則,高頻場景建議預編譯 Pattern
  • 邊界行為:尾部空字串預設捨棄,需用 split(regex, -1) 保留

方案二:StringTokenizer - 傳統分詞器

import java.util.Arrays;
import java.util.StringTokenizer;

public class SplitStringTest {
    public static void main(String[] args) {
        String s = "5,8,7,4,3,9,1";
        StringTokenizer commaTokenizer = new StringTokenizer(s, ",");
        String[] result = new String[commaTokenizer.countTokens()];
        int k = 0;

        while (commaTokenizer.hasMoreTokens()) {
            result[k++] = commaTokenizer.nextToken();
        }

        int[] a = new int[result.length];
        for (int i = 0; i < result.length; i++) {
            a[i] = Integer.parseInt(result[i]);
        }

        Arrays.sort(a);
        for (int j = 0; j < result.length; j++) {
            System.out.println(a[j]);
        }
    }
}

核心特性

  • 非正則分割:僅支援單字元或字元集合分隔符,無正則開銷
  • 迭代器模式:hasMoreTokens()/nextToken() 惰性處理,記憶體友善
  • 不支援空欄位:連續分隔符視為單一分隔,無法保留空字串
  • 舊版 API:JDK 1.0 產物,官方文檔建議新代碼優先使用 split()

效能對比與選型指南

維度String.split()StringTokenizer
簡單分隔符效能較慢(正則編譯)較快(無正則)
複雜模式支援完整支援不支援
空欄位處理可控制保留自動忽略
記憶體模式一次性建立陣列迭代式逐個產生
現代化程度推薦標準維護模式

最佳實踐建議

  1. 固定單字元分隔符、高頻調用:優先 StringTokenizer 或手寫解析
  2. 複雜分隔規則、需保留空欄位:必須使用 split()
  3. Java 8+ 專案:考慮 Pattern.compile(regex).splitAsStream(str) 獲得串流優勢
  4. 超大字串分割:StringTokenizer 迭代模式避免全量陣列記憶體壓力

進階補充:第三方庫選項

  • Apache Commons Lang:StringUtils.split() 提供更豐富的空值處理與效能優化
  • Guava Splitter:流式 API、可配置修剪、限制分割數量、支援 Map 分割
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved