demoshop

demo, trying to be the best_

昨天發了一篇文「使用 C# 實作 數字的半形轉全形 」後有朋友提供一個看來很優的寫法,因此很好奇的今天要來針對昨天 demo 寫的版本和引用VB的版本和網友提供的版本來作一個效能與功能比較。

demo廢言demo 的需求和昨天一樣因此不多談,想了解的朋友請至「使用 C# 實作 數字的半形轉全形 」參考,現在是手上擁有了三套可以達到我這小小需求的程式,因此就興起了效能比較的想法,所以就來開始今天的主題了。

 

●demo 版

/// <summary>
        /// 轉換為全形數字
        /// </summary>
        public static string ConvertToFullwidthNumber(this string input)
        {
            //先檢查輸入的是否可以轉換為數值
            if (new Regex(@"\d+").IsMatch(input))
            {
                //宣告一個字串陣列用來儲存全形的數字
                string[] FullwidthNumber = new string[]
                {
                    "0", "1", "2", "3", "4",
                    "5", "6", "7", "8", "9"
                };

                //宣告一個字串來暫接
                string temp = string.Empty;

                //將輸入的值轉成字元陣列
                foreach (char element in input.ToCharArray())
                {
                    //因為 Char 不能直接轉 Int 因此先 ToString 再轉 Int
                    temp += FullwidthNumber[Convert.ToInt32(element.ToString())];
                }

                //回傳轉換後的字串
                return Convert.ToString(temp);
            }
            throw new Exception("字串包含非數字字元無法轉換!");
        }

注意事項傳入的字串必須都是可以轉換成數字的,不然就會拋出例外。


●引用 VB 版

public static string ConvertToFullwidthNumberVB(this string input)
        {
            return  Strings.StrConv(input, VbStrConv.Wide, 0).ToLower().Trim();
        }

注意事項傳入的字串可以混雜英文和數字,皆會轉換為全形。


●Dino 版

public static string ToFullformDigit(this string input)
        {
            return Regex.Replace(input, @"\d", m =>
            {
                var num = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
                var pos = int.Parse(m.Value);
                return num[pos];
            });
        }

注意事項傳入的字串可以混雜英文和數字,但只針對數字作全形轉換


demo廢言以上就是程式的完整風貌以及功能限制,再來就是效能比較了,demo 分別測試了5次數據還滿詭異的,給各位看看。

 

 

 

 

回應討論