You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
3.7 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace Apewer.Run
  5. {
  6. class Config
  7. {
  8. public Config()
  9. {
  10. Test(typeof(Config).FullName, "");
  11. Test(typeof(Config).FullName, ",");
  12. Test(typeof(Config).FullName, ".");
  13. }
  14. void Test(string input, string separator)
  15. {
  16. var split = Split_Agent(input, separator);
  17. Console.Write(input + " | " + separator + " | ");
  18. Console.WriteLine(string.Join(" - ", split));
  19. }
  20. public static string[] Split_Agent(string @this, params string[] saparators)
  21. {
  22. var text = @this;
  23. if (string.IsNullOrEmpty(text)) return new string[0];
  24. if (saparators == null || saparators.LongLength < 1L) return new string[1] { text };
  25. var ss = new List<string>();
  26. foreach (var s in saparators)
  27. {
  28. if (string.IsNullOrEmpty(s)) continue;
  29. if (ss.Contains(s)) continue;
  30. ss.Add(s);
  31. }
  32. var parts = new List<string>();
  33. var length = 0;
  34. var sample = text;
  35. var saparator = null as string;
  36. while (true)
  37. {
  38. if (sample.Length < 0)
  39. {
  40. parts.Add(sample);
  41. break;
  42. }
  43. length = -1;
  44. saparator = null;
  45. foreach (var s in ss)
  46. {
  47. var i = sample.IndexOf(s);
  48. if (i > -1)
  49. {
  50. length = i;
  51. saparator = s;
  52. break;
  53. }
  54. }
  55. if (saparator == null)
  56. {
  57. parts.Add(sample);
  58. break;
  59. }
  60. var part = sample.Substring(0, length);
  61. parts.Add(part);
  62. sample = sample.Substring(length + saparator.Length);
  63. }
  64. return parts.ToArray();
  65. }
  66. public static string[] Split(string argExpression, string argSeparator)
  67. {
  68. var expression = argExpression;
  69. var separator = argSeparator;
  70. if (string.IsNullOrEmpty(expression)) return new string[] { "" };
  71. if (string.IsNullOrEmpty(separator)) return new string[] { expression };
  72. if (separator.Length > expression.Length) return new string[] { expression };
  73. var list = new List<string>();
  74. var position = 0;
  75. var total = expression.Length;
  76. var length = separator.Length;
  77. var cell = new StringBuilder();
  78. while (position < total)
  79. {
  80. var read = (position + length < total) ? expression.Substring(position, length) : expression.Substring(position);
  81. if (read == separator)
  82. {
  83. if (cell.Length > 0)
  84. {
  85. list.Add(cell.ToString());
  86. #if NET20
  87. cell = new StringBuilder();
  88. #else
  89. cell.Clear();
  90. #endif
  91. }
  92. else
  93. {
  94. list.Add("");
  95. }
  96. position += length;
  97. }
  98. else
  99. {
  100. cell.Append(expression[position]);
  101. position += 1;
  102. }
  103. if (position >= total)
  104. {
  105. list.Add(cell.ToString());
  106. }
  107. }
  108. var array = list.ToArray();
  109. return array;
  110. }
  111. }
  112. }