使用 C# 實作 數字的半形轉全形
- 2010-10-11
- 17945
- 0
今天跑出了個需求,是要把半形的數字改成全形的數字,網路上搜了一下對於C#的解決方案都是要直接把 VisualBasic 參考進來,但是我就是不想...因此就著手寫了一下,順便作了一下效能比較
先來說需求,有在發送簡訊的朋友應該都會知道為了防止詐騙,現在的簡訊中不允許出現連續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 版本得來測試,以下就是測試的結果
看得出來直接使用 string += 的玩法是比較快的,但是這比較對於 VB 的函式有點不公平,因為他的轉換是可以將英文、數字、符號都轉換為全形的,而我寫的只能轉數字(而且還要是全數字)因此如果有用的話再拿去用吧
回應討論