demoshop

demo, trying to be the best_

今天跑出了個需求,是要把半形的數字改成全形的數字,網路上搜了一下對於C#的解決方案都是要直接把 VisualBasic 參考進來,但是我就是不想...因此就著手寫了一下,順便作了一下效能比較

demo廢言先來說需求,有在發送簡訊的朋友應該都會知道為了防止詐騙,現在的簡訊中不允許出現連續9位數以上的數字,雖然說各大簡訊API都說可以自行處理掉,但是我就是想要自己寫,免得哪天客戶換了簡訊的配合廠商而導致我程式掛掉,需求說完了就來看Code吧。

●這是完整可以使用的 Code

/// <summary>
        /// 轉換為全形數字
        /// </summary>
        public static string ConvertToFullwidthNumber2(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("字串包含非數字字元無法轉換!");
        }

●雖然是寫好了但是很好奇這種 += 的情況如果改用 StringBuilder 效能會不會比較好,因此又寫了一個是將 string 改成宣告 StringBuilder ,不過效能不是很優(下方圖片會介紹)


●再來又好奇 VisualBasic 的函式會不會比較快,因此又寫了一個 引用VisualBasic 版本得來測試,以下就是測試的結果

demo廢言看得出來直接使用 string += 的玩法是比較快的,但是這比較對於 VB 的函式有點不公平,因為他的轉換是可以將英文、數字、符號都轉換為全形的,而我寫的只能轉數字(而且還要是全數字)因此如果有用的話再拿去用吧

回應討論