StrUtil.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. using System.IO;
  2. namespace ET.PackageManager.Editor
  3. {
  4. public static partial class StrUtil
  5. {
  6. public static string Concat(string str1, string str2)
  7. {
  8. var sb = SbPool.Get();
  9. sb.Append(str1).Append(str2);
  10. return SbPool.PutAndToStr(sb);
  11. }
  12. public static string Concat(string str1, string str2, string str3)
  13. {
  14. var sb = SbPool.Get();
  15. sb.Append(str1).Append(str2).Append(str3);
  16. return SbPool.PutAndToStr(sb);
  17. }
  18. public static string Concat(params string[] param)
  19. {
  20. var sb = SbPool.Get();
  21. for (int i = 0; i < param.Length; i++)
  22. {
  23. sb.Append(param[i]);
  24. }
  25. return SbPool.PutAndToStr(sb);
  26. }
  27. public static string Concat(params object[] param)
  28. {
  29. var sb = SbPool.Get();
  30. for (int i = 0; i < param.Length; i++)
  31. {
  32. sb.Append(param[i]);
  33. }
  34. return SbPool.PutAndToStr(sb);
  35. }
  36. /// <summary>
  37. /// 按头字母大写来格式化名字
  38. /// </summary>
  39. /// <param name="name"></param>
  40. /// <returns></returns>
  41. public static string FormatName(string name)
  42. {
  43. if (string.IsNullOrEmpty(name))
  44. {
  45. return "";
  46. }
  47. StringWriter sw = new StringWriter();
  48. bool isFirst = true;
  49. for (int index = 0; index < name.Length; index++)
  50. {
  51. char c = name[index];
  52. if (c == '_')
  53. {
  54. isFirst = true;
  55. continue;
  56. }
  57. if (isFirst)
  58. {
  59. if (c >= 'a' && c <= 'z')
  60. {
  61. c = char.ToUpper(c);
  62. }
  63. isFirst = false;
  64. }
  65. sw.Write(c);
  66. }
  67. sw.Close();
  68. return sw.ToString();
  69. }
  70. /// <summary>
  71. /// 替换路径中的扩展名
  72. /// </summary>
  73. /// <param name="path"></param>
  74. /// <param name="newExtension"></param>
  75. /// <returns></returns>
  76. public static string ReplacePathExtension(string path, string newExtension)
  77. {
  78. var extIndex = path.LastIndexOf('.');
  79. if (extIndex > -1)
  80. {
  81. path = path.Substring(0, extIndex);
  82. }
  83. if (newExtension[0] == '.')
  84. {
  85. return path + newExtension;
  86. }
  87. return path + "." + newExtension;
  88. }
  89. /// <summary>
  90. /// 替换文本中的占位符
  91. /// </summary>
  92. /// <param name="template"></param>
  93. /// <param name="keyName"></param>
  94. /// <param name="values"></param>
  95. /// <returns></returns>
  96. public static string ReplaceKeyToValue(string template, string keyName, params string[] values)
  97. {
  98. var sb = SbPool.Get();
  99. var chunks = GetStrChunk(template);
  100. for (int i = 0; i < chunks.Length; i++)
  101. {
  102. var chunk = chunks[i];
  103. if (chunk.KeyIndex == 0)
  104. {
  105. sb.Append(chunk.TextOrKey);
  106. continue;
  107. }
  108. if (chunk.TextOrKey != keyName ||
  109. chunk.KeyIndex > values.Length)
  110. {
  111. sb.Append('{')
  112. .Append(chunk.TextOrKey)
  113. .Append(chunk.KeyIndex)
  114. .Append('}');
  115. continue;
  116. }
  117. sb.Append(values[chunk.KeyIndex - 1]);
  118. }
  119. return SbPool.PutAndToStr(sb);
  120. }
  121. /// <summary>
  122. /// 替换字符串
  123. /// 这个方法用于替换翔进的ReplaceString
  124. /// 注意,因为用到非加锁缓存,所以不得用于多线程
  125. /// </summary>
  126. /// <param name="text"></param>
  127. /// <param name="param"></param>
  128. /// <returns></returns>
  129. public static string ReplaceText(string text, params string[] param)
  130. {
  131. return ReplaceKeyToValue(text, "text", param);
  132. }
  133. /// <summary>
  134. /// 将字符串里的英文大写转小写
  135. /// </summary>
  136. /// <param name="s"></param>
  137. /// <returns></returns>
  138. public static string ToLower(string s)
  139. {
  140. if (string.IsNullOrEmpty(s))
  141. {
  142. return "";
  143. }
  144. var length = s.Length;
  145. bool hasChange = false;
  146. var sb = SbPool.Get();
  147. for (int i = 0; i < length; i++)
  148. {
  149. char c = s[i];
  150. if (c >= 'A' && c <= 'Z')
  151. {
  152. hasChange = true;
  153. sb.Append(char.ToLower(c));
  154. }
  155. else
  156. {
  157. sb.Append(c);
  158. }
  159. }
  160. if (hasChange)
  161. {
  162. return SbPool.PutAndToStr(sb);
  163. }
  164. //如果没有改变,省一个toString
  165. SbPool.Put(sb);
  166. return s;
  167. }
  168. }
  169. }