[转]StringHelper类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Text.RegularExpressions; 5 using System.Web; 6 using System.Security.Cryptography; 7 8 namespace Cvv.Components 9 { 10 public static class StringHelper 11 { 12 静态方法#region 静态方法 13 /**//// <summary> 14 /// 对字符串进行base64编码 15 /// </summary> 16 /// <param name="input">字符串</param> 17 /// <returns>base64编码串</returns> 18 public static string Base64StringEncode(string input) 19 { 20 byte[] encbuff = System.Text.Encoding.UTF8.GetBytes(input); 21 return Convert.ToBase64String(encbuff); 22 } 23 24 /**//// <summary> 25 /// 对字符串进行反编码 26 /// </summary> 27 /// <param name="input">base64编码串</param> 28 /// <returns>字符串</returns> 29 public static string Base64StringDecode(string input) 30 { 31 byte[] decbuff = Convert.FromBase64String(input); 32 return System.Text.Encoding.UTF8.GetString(decbuff); 33 } 34 35 /**//// <summary> 36 /// 替换字符串(忽略大小写) 37 /// </summary> 38 /// <param name="input">要进行替换的内容</param> 39 /// <param name="oldValue">旧字符串</param> 40 /// <param name="newValue">新字符串</param> 41 /// <returns>替换后的字符串</returns> 42 public static string CaseInsensitiveReplace(string input, string oldValue, string newValue) 43 { 44 Regex regEx = new Regex(oldValue, RegexOptions.IgnoreCase | RegexOptions.Multiline); 45 return regEx.Replace(input, newValue); 46 } 47 48 /**//// <summary> 49 /// 替换首次出现的字符串 50 /// </summary> 51 /// <param name="input">要进行替换的内容</param> 52 /// <param name="oldValue">旧字符串</param> 53 /// <param name="newValue">新字符串</param> 54 /// <returns>替换后的字符串</returns> 55 public static string ReplaceFirst(string input, string oldValue, string newValue) 56 { 57 Regex regEx = new Regex(oldValue, RegexOptions.Multiline); 58 return regEx.Replace(input, newValue, 1); 59 } 60 61 /**//// <summary> 62 /// 替换最后一次出现的字符串 63 /// </summary> 64 /// <param name="input">要进行替换的内容</param> 65 /// <param name="oldValue">旧字符串</param> 66 /// <param name="newValue">新字符串</param> 67 /// <returns>替换后的字符串</returns> 68 public static string ReplaceLast(string input, string oldValue, string newValue) 69 { 70 int index = input.LastIndexOf(oldValue); 71 if (index < 0) 72 { 73 return input; 74 } 75 else 76 { 77 StringBuilder sb = new StringBuilder(input.Length - oldValue.Length + newValue.Length); 78 sb.Append(input.Substring(0, index)); 79 sb.Append(newValue); 80 sb.Append(input.Substring(index + oldValue.Length, input.Length - index - oldValue.Length)); 81 return sb.ToString(); 82 } 83 } 84 85 /**//// <summary> 86 /// 根据词组过虑字符串(忽略大小写) 87 /// </summary> 88 /// <param name="input">要进行过虑的内容</param> 89 /// <param name="filterWords">要过虑的词组</param> 90 /// <returns>过虑后的字符串</returns> 91 public static string FilterWords(string input, params string[] filterWords) 92 { 93 return StringHelper.FilterWords(input, char.MinValue, filterWords); 94 } 95 96 /**//// <summary> 97 /// 根据词组过虑字符串(忽略大小写) 98 /// </summary> 99 /// <param name="input">要进行过虑的内容</param> 100 /// <param name="mask">字符掩码</param> 101 /// <param name="filterWords">要过虑的词组</param> 102 /// <returns>过虑后的字符串</returns> 103 public static string FilterWords(string input, char mask, params string[] filterWords) 104 { 105 string stringMask = mask == char.MinValue ? string.Empty : mask.ToString(); 106 string totalMask = stringMask; 107 108 foreach (string s in filterWords) 109 { 110 Regex regEx = new Regex(s, RegexOptions.IgnoreCase | RegexOptions.Multiline); 111 112 if (stringMask.Length > 0) 113 { 114 for (int i = 1; i < s.Length; i++) 115 totalMask += stringMask; 116 } 117 118 input = regEx.Replace(input, totalMask); 119 120 totalMask = stringMask; 121 } 122 123 return input; 124 } 125 126 public static MatchCollection HasWords(string input, params string[] hasWords) 127 { 128 StringBuilder sb = new StringBuilder(hasWords.Length + 50); 129 //sb.Append("["); 130 131 foreach (string s in hasWords) 132 { 133 sb.AppendFormat("({0})|", StringHelper.HtmlSpecialEntitiesEncode(s.Trim())); 134 } 135 136 string pattern = sb.ToString(); 137 pattern = pattern.TrimEnd('|'); // +"]"; 138 139 Regex regEx = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline); 140 return regEx.Matches(input); 141 } 142 143 /**//// <summary> 144 /// Html编码 145 /// </summary> 146 /// <param name="input">要进行编辑的字符串</param> 147 /// <returns>Html编码后的字符串</returns> 148 public static string HtmlSpecialEntitiesEncode(string input) 149 { 150 return HttpUtility.HtmlEncode(input); 151 } 152 153 /**//// <summary> 154 /// Html解码 155 /// </summary> 156 /// <param name="input">要进行解码的字符串</param> 157 /// <returns>解码后的字符串</returns> 158 public static string HtmlSpecialEntitiesDecode(string input) 159 { 160 return HttpUtility.HtmlDecode(input); 161 } 162 163 /**//// <summary> 164 /// MD5加密 165 /// </summary> 166 /// <param name="input">要进行加密的字符串</param> 167 /// <returns>加密后的字符串</returns> 168 public static string MD5String(string input) 169 { 170 MD5 md5Hasher = MD5.Create(); 171 172 byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input)); 173 174 StringBuilder sBuilder = new StringBuilder(); 175 176 for (int i = 0; i < data.Length; i++) 177 { 178 sBuilder.Append(data[i].ToString("x2")); 179 } 180 181 return sBuilder.ToString(); 182 } 183 184 /**//// <summary> 185 /// 对字符串进行MD5较验 186 /// </summary> 187 /// <param name="input">要进行较验的字符串</param> 188 /// <param name="hash">散列串</param> 189 /// <returns>是否匹配</returns> 190 public static bool MD5VerifyString(string input, string hash) 191 { 192 string hashOfInput = StringHelper.MD5String(input); 193 194 StringComparer comparer = StringComparer.OrdinalIgnoreCase; 195 196 if (0 == comparer.Compare(hashOfInput, hash)) 197 { 198 return true; 199 } 200 else 201 { 202 return false; 203 } 204 } 205 206 public static string PadLeftHtmlSpaces(string input, int totalSpaces) 207 { 208 string space = " "; 209 return PadLeft(input, space, totalSpaces * space.Length); 210 } 211 212 public static string PadLeft(string input, string pad, int totalWidth) 213 { 214 return StringHelper.PadLeft(input, pad, totalWidth, false); 215 } 216 217 public static string PadLeft(string input, string pad, int totalWidth, bool cutOff) 218 { 219 if (input.Length >= totalWidth) 220 return input; 221 222 int padCount = pad.Length; 223 string paddedString = input; 224 225 while (paddedString.Length < totalWidth) 226 { 227 paddedString += pad; 228 } 229 230 // trim the excess. 231 if (cutOff) 232 paddedString = paddedString.Substring(0, totalWidth); 233 234 return paddedString; 235 } 236 237 public static string PadRightHtmlSpaces(string input, int totalSpaces) 238 { 239 string space = " "; 240 return PadRight(input, space, totalSpaces * space.Length); 241 } 242 243 public static string PadRight(string input, string pad, int totalWidth) 244 { 245 return StringHelper.PadRight(input, pad, totalWidth, false); 246 } 247 248 public static string PadRight(string input, string pad, int totalWidth, bool cutOff) 249 { 250 if (input.Length >= totalWidth) 251 return input; 252 253 string paddedString = string.Empty; 254 255 while (paddedString.Length < totalWidth - input.Length) 256 { 257 paddedString += pad; 258 } 259 260 // trim the excess. 261 if (cutOff) 262 paddedString = paddedString.Substring(0, totalWidth - input.Length); 263 264 paddedString += input; 265 266 return paddedString; 267 } 268 269 /**//// <summary> 270 /// 去除新行 271 /// </summary> 272 /// <param name="input">要去除新行的字符串</param> 273 /// <returns>已经去除新行的字符串</returns> 274 public static string RemoveNewLines(string input) 275 { 276 return StringHelper.RemoveNewLines(input, false); 277 } 278 279 /**//// <summary> 280 /// 去除新行 281 /// </summary> 282 /// <param name="input">要去除新行的字符串</param> 283 /// <param name="addSpace">是否添加空格</param> 284 /// <returns>已经去除新行的字符串</returns> 285 public static string RemoveNewLines(string input, bool addSpace) 286 { 287 string replace = string.Empty; 288 if (addSpace) 289 replace = " "; 290 291 string pattern = @"[\r|\n]"; 292 Regex regEx = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline); 293 294 return regEx.Replace(input, replace); 295 } 296 297 /**//// <summary> 298 /// 字符串反转 299 /// </summary> 300 /// <param name="input">要进行反转的字符串</param> 301 /// <returns>反转后的字符串</returns> 302 public static string Reverse(string input) 303 { 304 char[] reverse = new char[input.Length]; 305 for (int i = 0, k = input.Length - 1; i < input.Length; i++, k--) 306 { 307 if (char.IsSurrogate(input[k])) 308 { 309 reverse[i + 1] = input[k--]; 310 reverse[i++] = input[k]; 311 } 312 else 313 { 314 reverse[i] = input[k]; 315 } 316 } 317 return new System.String(reverse); 318 } 319 320 /**//// <summary> 321 /// 转成首字母大字形式 322 /// </summary> 323 /// <param name="input">要进行转换的字符串</param> 324 /// <returns>转换后的字符串</returns> 325 public static string SentenceCase(string input) 326 { 327 if (input.Length < 1) 328 return input; 329 330 string sentence = input.ToLower(); 331 return sentence[0].ToString().ToUpper() + sentence.Substring(1); 332 } 333 334 /**//// <summary> 335 /// 空格转换成 336 /// </summary> 337 /// <param name="input">要进行转换的字符串</param> 338 /// <returns>转换后的字符串</returns> 339 public static string SpaceToNbsp(string input) 340 { 341 string space = " "; 342 return input.Replace(" ", space); 343 } 344 345 /**//// <summary> 346 /// 去除"<" 和 ">" 符号之间的内容 347 /// </summary> 348 /// <param name="input">要进行处理的字符串</param> 349 /// <returns>处理后的字符串</returns> 350 public static string StripTags(string input) 351 { 352 Regex stripTags = new Regex("<(.|\n)+?>"); 353 return stripTags.Replace(input, ""); 354 } 355 356 public static string TitleCase(string input) 357 { 358 return TitleCase(input, true); 359 } 360 361 public static string TitleCase(string input, bool ignoreShortWords) 362 { 363 List<string> ignoreWords = null; 364 if (ignoreShortWords) 365 { 366 //TODO: Add more ignore words? 367 ignoreWords = new List<string>(); 368 ignoreWords.Add("a"); 369 ignoreWords.Add("is"); 370 ignoreWords.Add("was"); 371 ignoreWords.Add("the"); 372 } 373 374 string[] tokens = input.Split(' '); 375 StringBuilder sb = new StringBuilder(input.Length); 376 foreach (string s in tokens) 377 { 378 if (ignoreShortWords == true 379 && s != tokens[0] 380 && ignoreWords.Contains(s.ToLower())) 381 { 382 sb.Append(s + " "); 383 } 384 else 385 { 386 sb.Append(s[0].ToString().ToUpper()); 387 sb.Append(s.Substring(1).ToLower()); 388 sb.Append(" "); 389 } 390 } 391 392 return sb.ToString().Trim(); 393 } 394 395 /**//// <summary> 396 /// 去除字符串内的空白字符 397 /// </summary> 398 /// <param name="input">要进行处理的字符串</param> 399 /// <returns>处理后的字符串</returns> 400 public static string TrimIntraWords(string input) 401 { 402 Regex regEx = new Regex(@"[\s]+"); 403 return regEx.Replace(input, " "); 404 } 405 406 /**//// <summary> 407 /// 换行符转换成Html标签的换行符<br /> 408 /// </summary> 409 /// <param name="input">要进行处理的字符串</param> 410 /// <returns>处理后的字符串</returns> 411 public static string NewLineToBreak(string input) 412 { 413 Regex regEx = new Regex(@"[\n|\r]+"); 414 return regEx.Replace(input, "<br />"); 415 } 416 417 /**//// <summary> 418 /// 插入换行符(不中断单词) 419 /// </summary> 420 /// <param name="input">要进行处理的字符串</param> 421 /// <param name="charCount">每行字符数</param> 422 /// <returns>处理后的字符串</returns> 423 public static string WordWrap(string input, int charCount) 424 { 425 return StringHelper.WordWrap(input, charCount, false, Environment.NewLine); 426 } 427 428 /**//// <summary> 429 /// 插入换行符 430 /// </summary> 431 /// <param name="input">要进行处理的字符串</param> 432 /// <param name="charCount">每行字符数</param> 433 /// <param name="cutOff">如果为真,将在单词的中部断开</param> 434 /// <returns>处理后的字符串</returns> 435 public static string WordWrap(string input, int charCount, bool cutOff) 436 { 437 return StringHelper.WordWrap(input, charCount, cutOff, Environment.NewLine); 438 } 439 440 /**//// <summary> 441 /// 插入换行符 442 /// </summary> 443 /// <param name="input">要进行处理的字符串</param> 444 /// <param name="charCount">每行字符数</param> 445 /// <param name="cutOff">如果为真,将在单词的中部断开</param> 446 /// <param name="breakText">插入的换行符号</param> 447 /// <returns>处理后的字符串</returns> 448 public static string WordWrap(string input, int charCount, bool cutOff, string breakText) 449 { 450 StringBuilder sb = new StringBuilder(input.Length + 100); 451 int counter = 0; 452 453 if (cutOff) 454 { 455 while (counter < input.Length) 456 { 457 if (input.Length > counter + charCount) 458 { 459 sb.Append(input.Substring(counter, charCount)); 460 sb.Append(breakText); 461 } 462 else 463 { 464 sb.Append(input.Substring(counter)); 465 } 466 counter += charCount; 467 } 468 } 469 else 470 { 471 string[] strings = input.Split(' '); 472 for (int i = 0; i < strings.Length; i++) 473 { 474 counter += strings[i].Length + 1; // the added one is to represent the inclusion of the space. 475 if (i != 0 && counter > charCount) 476 { 477 sb.Append(breakText); 478 counter = 0; 479 } 480 481 sb.Append(strings[i] + ' '); 482 } 483 } 484 return sb.ToString().TrimEnd(); // to get rid of the extra space at the end. 485 } 486 #endregion 487 } 488 }