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

C# 自訂 Split 字串分割函式:支援字串分隔符與效能比較

     編輯:關於C#

前言

.NET 早期版本 String.Split 僅支援單一字元或字元陣列做分隔符,無法直接用字串分割(如 "::"、"||")。本文提供一個自訂 Split 方法支援字串分隔符,並與 Regex.Split 進行效能比較。

自訂 Split 實作

using System;
using System.Collections;

namespace split
{
    class mySplit
    {
        [STAThread]
        static void Main(string[] args)
        {
            string str1 = "", str2 = "";
            if (args.Length != 2)
            {
                Console.WriteLine("請輸入要分割的字串:");
                str1 = Console.ReadLine();
                Console.WriteLine("請輸入分割符:");
                str2 = Console.ReadLine();
                Console.WriteLine(" 分割出的資料如下: ");
            }
            else
            {
                str1 = args[0];
                str2 = args[1];
            }

            string[] output = Split(str1, str2);
            for (int i = 0; i < output.Length; i++)
                Console.WriteLine("{0}", output[i]);
            Console.WriteLine(" 被分割成{0}份字串!", output.Length);

            // 效能測試
            TimeSpan sp1, sp2;
            DateTime dt = DateTime.Now;
            for (int i = 0; i < 1000; i++)
            {
                output = Split(str1, str2);
                output = null;
            }
            sp1 = DateTime.Now - dt;
            Console.WriteLine(" 自訂 Split 耗時: {0}", sp1);

            // Regex.Split 比較
            System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex("&&");
            dt = DateTime.Now;
            for (int j = 0; j < 1000; j++)
            {
                output = rg.Split(str1);
                output = null;
            }
            sp2 = DateTime.Now - dt;
            Console.WriteLine(" Regex.Split 耗時: {0}", sp2);
        }

        /// 
        /// 使用字串分隔符分割字串
        /// 
        public static string[] Split(string source, string separator)
        {
            if (string.IsNullOrEmpty(separator))
                return new string[] { source };

            ArrayList result = new ArrayList();
            int startIndex = 0;
            while (true)
            {
                int index = source.IndexOf(separator, startIndex);
                if (index == -1)
                {
                    result.Add(source.Substring(startIndex));
                    break;
                }
                result.Add(source.Substring(startIndex, index - startIndex));
                startIndex = index + separator.Length;
            }
            return (string[])result.ToArray(typeof(string));
        }
    }
}

效能測試結果分析

  • 自訂 Split:使用 IndexOf + Substring 迴圈,純 managed 程式碼,無正規表示式引擎開銷,短字串、簡單分隔符時極快。
  • Regex.Split:功能強大(支援模式比對),但編譯正規表示式、建立 Match 物件有固定成本,簡單分割場景較慢。
  • .NET 2.0+ 新增:String.Split(string[], StringSplitOptions) 內建支援字串分隔符,現代專案請直接使用內建方法。

現代最佳實務


// .NET 2.0 以上內建支援字串分隔符
string[] parts = source.Split(new string[] { "::", "||" }, StringSplitOptions.None);

// 移除空白項目
string[] parts2 = source.Split(new string[] { "::" }, StringSplitOptions.RemoveEmptyEntries);

結語

理解字串分割的演算法原理(尋找分隔符位置、擷取子字串)有助於在無內建支援的舊版環境或特殊需求下自行實作。現代 .NET 開發請優先使用 String.Split(string[]),僅在需要正規表示式威力時才引入 Regex.Split。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved