使用 C# 實作 數字的半形轉全形 Part II 效能比較
- 2010-10-12
- 17242
- 0
昨天發了一篇文「使用 C# 實作 數字的半形轉全形 」後有朋友提供一個看來很優的寫法,因此很好奇的今天要來針對昨天 demo 寫的版本和引用VB的版本和網友提供的版本來作一個效能與功能比較。
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 分別測試了5次數據還滿詭異的,給各位看看。
回應討論