fork(2) download
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4. using System.Diagnostics;
  5. using System.Text.RegularExpressions;
  6.  
  7. public class Test
  8. {
  9. public static void Main()
  10. {
  11. var hoge = "あいうえおかきくけこさしすせそたちつてとちゃちゅちょ";
  12. var originalString = "";
  13. for (int i = 0; i < 100; i++)
  14. {
  15. originalString += hoge;
  16. }
  17.  
  18. var sw = new Stopwatch();
  19.  
  20. var kana = "ちゃ|ちゅ|ちょ|あ|い|う|え|お|か|き|く|け|こ|さ|し|す|せ|そ|た|ち|つ|て|と";
  21. var roman = "Cha|Chu|Cho|A|I|U|E|O|Ka|Ki|Ku|Ke|Ko|Sa|Shi|Su|Se|So|Ta|Chi|Tsu|Te|To";
  22. var dic = kana.Split('|').Zip(roman.Split('|'), (l, r) => new { Key = l, Value = r }).ToDictionary(x => x.Key, x => x.Value);
  23.  
  24. var kana2 = new Dictionary<string, string>() { { "ちゃ", "Cha" }, { "ちゅ", "Chu" }, { "ちょ", "Cho" } };
  25. var kana1 = new Dictionary<string, string>()
  26. {
  27. { "あ", "A" }, { "い", "I" }, { "う", "U" }, { "え", "E" }, { "お", "O" },
  28. { "か", "Ka" }, { "き", "Ki" }, { "く", "Ku" }, { "け", "Ke" }, { "こ", "Ko" },
  29. { "さ", "Sa" }, { "し", "Shi" }, { "す", "Su" }, { "せ", "Se" }, { "そ", "So" },
  30. { "た", "Ta" }, { "ち", "Chi" }, { "つ", "Tsu" }, { "て", "Te" }, { "と", "To" },
  31. };
  32.  
  33. for (int i = 0; i < 3; i++)
  34. {
  35. sw.Restart();
  36. var replaceString = new System.Text.StringBuilder();
  37. for (int j = 0; j < originalString.Length; j++)
  38. {
  39. if (kana2.TryGetValue(originalString.Substring(j, 2), out var value1))
  40. {
  41. replaceString.Append(value1);
  42. j++;
  43. }
  44. else
  45. {
  46. if (kana1.TryGetValue(originalString.Substring(j, 1), out var value2))
  47. {
  48. replaceString.Append(value2);
  49. }
  50. }
  51. }
  52. var ver1 = replaceString.ToString();
  53. sw.Stop();
  54. Console.WriteLine($"Replace({i}) Elapsed Time:{sw.Elapsed}");
  55.  
  56. sw.Restart();
  57. var ver2 = Regex.Replace(originalString, $"({kana})", match => dic[match.Value]);
  58. sw.Stop();
  59. Console.WriteLine($"Regex ({i}) Elapsed Time:{sw.Elapsed}");
  60.  
  61. if (ver1 != ver2) throw new Exception();
  62. }
  63. }
  64. }
Success #stdin #stdout 0.08s 25260KB
stdin
Standard input is empty
stdout
Replace(0) Elapsed Time:00:00:00.0010331
Regex  (0) Elapsed Time:00:00:00.0487896
Replace(1) Elapsed Time:00:00:00.0007018
Regex  (1) Elapsed Time:00:00:00.0023549
Replace(2) Elapsed Time:00:00:00.0006949
Regex  (2) Elapsed Time:00:00:00.0022229