- 1 #region Usings
- 2 using System;
- 3 using System.Text;
- 4 using System.Data;
- 5 using System.Data.SqlClient;
- 6 using System.Text.RegularExpressions;
- 7 using System.Linq;
- 8 using System.Collections.Generic;
- 9 using System.ComponentModel;
- 10 using DragonUtility.DataTypes.Formatters;
- 11 using Microsoft.VisualBasic;
- 12 #endregion
- 13
- 14 namespace DragonUtility.DataTypes.ExtensionMethods
- 15 {
- 16 /// <summary>
- 17 /// String extensions
- 18 /// </summary>
- 19 public static class StringExtensions
- 20 {
- 21 #region Functions
- 22
- 23 #region Encode
- 24
- 25 /// <summary>
- 26 /// 编码转换,把字符串从一种编码转换到另一种编码
- 27 /// </summary>
- 28 /// <param name="Input">input string</param>
- 29 /// <param name="OriginalEncodingUsing">The type of encoding the string is currently using (defaults to ASCII)</param>
- 30 /// <param name="EncodingUsing">The type of encoding the string is converted into (defaults to UTF8)</param>
- 31 /// <returns>string of the byte array</returns>
- 32 public static string Encode(this string Input, Encoding OriginalEncodingUsing = null, Encoding EncodingUsing = null)
- 33 {
- 34 if (string.IsNullOrEmpty(Input))
- 35 return "";
- 36 OriginalEncodingUsing = OriginalEncodingUsing.NullCheck(new ASCIIEncoding());
- 37 EncodingUsing = EncodingUsing.NullCheck(new UTF8Encoding());
- 38 return Encoding.Convert(OriginalEncodingUsing, EncodingUsing, Input.ToByteArray(OriginalEncodingUsing))
- 39 .ToEncodedString(EncodingUsing);
- 40
- 41 }
- 42 #endregion
- 43
- 44 #region FromBase64
- 45
- 46 /// <summary>
- 47 /// Converts base 64 string based on the encoding passed in
- 48 /// </summary>
- 49 /// <param name="Input">Input string</param>
- 50 /// <param name="EncodingUsing">The type of encoding the string is using (defaults to UTF8)</param>
- 51 /// <returns>string in the encoding format</returns>
- 52 public static string FromBase64(this string Input, Encoding EncodingUsing)
- 53 {
- 54 if (string.IsNullOrEmpty(Input))
- 55 return "";
- 56 byte[] TempArray = Convert.FromBase64String(Input);
- 57 return EncodingUsing.NullCheck(new UTF8Encoding()).GetString(TempArray);
- 58 }
- 59
- 60 /// <summary>
- 61 /// Converts base 64 string to a byte array
- 62 /// </summary>
- 63 /// <param name="Input">Input string</param>
- 64 /// <returns>A byte array equivalent of the base 64 string</returns>
- 65 public static byte[] FromBase64(this string Input)
- 66 {
- 67 return string.IsNullOrEmpty(Input) ? new byte[0] : Convert.FromBase64String(Input);
- 68 }
- 69
- 70 #endregion
- 71
- 72 #region Left
- 73
- 74 /// <summary>
- 75 /// Gets the first x number of characters from the left hand side
- 76 /// </summary>
- 77 /// <param name="Input">Input string</param>
- 78 /// <param name="Length">x number of characters to return</param>
- 79 /// <returns>The resulting string</returns>
- 80 public static string Left(this string Input, int Length)
- 81 {
- 82 return string.IsNullOrEmpty(Input) ? "" : Input.Substring(0, Input.Length > Length ? Length : Input.Length);
- 83 }
- 84
- 85 #endregion
- 86
- 87 #region Right
- 88
- 89 /// <summary>
- 90 /// Gets the last x number of characters from the right hand side
- 91 /// </summary>
- 92 /// <param name="Input">Input string</param>
- 93 /// <param name="Length">x number of characters to return</param>
- 94 /// <returns>The resulting string</returns>
- 95 public static string Right(this string Input, int Length)
- 96 {
- 97 if (string.IsNullOrEmpty(Input))
- 98 return "";
- 99 Length = Input.Length > Length ? Length : Input.Length;
- 100 return Input.Substring(Input.Length - Length, Length);
- 101 }
- 102
- 103 #endregion
- 104
- 105 #region ToBase64
- 106
- 107 /// <summary>
- 108 /// Converts from the specified encoding to a base 64 string
- 109 /// </summary>
- 110 /// <param name="Input">Input string</param>
- 111 /// <param name="OriginalEncodingUsing">The type of encoding the string is using (defaults to UTF8)</param>
- 112 /// <returns>Bas64 string</returns>
- 113 public static string ToBase64(this string Input, Encoding OriginalEncodingUsing = null)
- 114 {
- 115 if (string.IsNullOrEmpty(Input))
- 116 return "";
- 117 byte[] TempArray = OriginalEncodingUsing.NullCheck(new UTF8Encoding()).GetBytes(Input);
- 118 return Convert.ToBase64String(TempArray);
- 119 }
- 120
- 121 #endregion
- 122
- 123 #region ToByteArray
- 124
- 125 /// <summary>
- 126 /// Converts a string to a byte array
- 127 /// </summary>
- 128 /// <param name="Input">input string</param>
- 129 /// <param name="EncodingUsing">The type of encoding the string is using (defaults to UTF8)</param>
- 130 /// <returns>the byte array representing the string</returns>
- 131 public static byte[] ToByteArray(this string Input, Encoding EncodingUsing = null)
- 132 {
- 133 return string.IsNullOrEmpty(Input) ? null : EncodingUsing.NullCheck(new UTF8Encoding()).GetBytes(Input);
- 134 }
- 135
- 136 #endregion
- 137
- 138 #region ToFirstCharacterUpperCase
- 139
- 140 /// <summary>
- 141 /// Takes the first character of an input string and makes it uppercase
- 142 /// </summary>
- 143 /// <param name="Input">Input string</param>
- 144 /// <returns>String with the first character capitalized</returns>
- 145 public static string ToFirstCharacterUpperCase(this string Input)
- 146 {
- 147 if (string.IsNullOrEmpty(Input))
- 148 return "";
- 149 char[] InputChars = Input.ToCharArray();
- 150 for (int x = 0; x < InputChars.Length; ++x)
- 151 {
- 152 if (InputChars[x] != ' ' && InputChars[x] != '\t')
- 153 {
- 154 InputChars[x] = char.ToUpper(InputChars[x]);
- 155 break;
- 156 }
- 157 }
- 158 return new string(InputChars);
- 159 }
- 160
- 161 #endregion
- 162
- 163 #region ToSentenceCapitalize
- 164
- 165 /// <summary>
- 166 /// Capitalizes each sentence within the string
- 167 /// </summary>
- 168 /// <param name="Input">Input string</param>
- 169 /// <returns>String with each sentence capitalized</returns>
- 170 public static string ToSentenceCapitalize(this string Input)
- 171 {
- 172 if (string.IsNullOrEmpty(Input))
- 173 return "";
- 174 string[] Seperator = { ".", "?", "!" };
- 175 string[] InputStrings = Input.Split(Seperator, StringSplitOptions.None);
- 176 for (int x = 0; x < InputStrings.Length; ++x)
- 177 {
- 178 if (!string.IsNullOrEmpty(InputStrings[x]))
- 179 {
- 180 Regex TempRegex = new Regex(InputStrings[x]);
- 181 InputStrings[x] = InputStrings[x].ToFirstCharacterUpperCase();
- 182 Input = TempRegex.Replace(Input, InputStrings[x]);
- 183 }
- 184 }
- 185 return Input;
- 186 }
- 187
- 188 #endregion
- 189
- 190 #region ToTitleCase
- 191
- 192 /// <summary>
- 193 /// Capitalizes the first character of each word
- 194 /// </summary>
- 195 /// <param name="Input">Input string</param>
- 196 /// <returns>String with each word capitalized</returns>
- 197 public static string ToTitleCase(this string Input)
- 198 {
- 199 if (string.IsNullOrEmpty(Input))
- 200 return "";
- 201 string[] Seperator = { " ", ".", "\t", System.Environment.NewLine, "!", "?" };
- 202 string[] InputStrings = Input.Split(Seperator, StringSplitOptions.None);
- 203 for (int x = 0; x < InputStrings.Length; ++x)
- 204 {
- 205 if (!string.IsNullOrEmpty(InputStrings[x])
- 206 && InputStrings[x].Length > 3)
- 207 {
- 208 Regex TempRegex = new Regex(InputStrings[x]);
- 209 InputStrings[x] = InputStrings[x].ToFirstCharacterUpperCase();
- 210 Input = TempRegex.Replace(Input, InputStrings[x]);
- 211 }
- 212 }
- 213 return Input;
- 214 }
- 215
- 216 #endregion
- 217
- 218 #region NumberTimesOccurs
- 219
- 220 /// <summary>
- 221 /// returns the number of times a string occurs within the text
- 222 /// </summary>
- 223 /// <param name="Input">input text</param>
- 224 /// <param name="Match">The string to match (can be regex)</param>
- 225 /// <returns>The number of times the string occurs</returns>
- 226 public static int NumberTimesOccurs(this string Input, string Match)
- 227 {
- 228 return string.IsNullOrEmpty(Input) ? 0 : new Regex(Match).Matches(Input).Count;
- 229 }
- 230
- 231 #endregion
- 232
- 233 #region Reverse
- 234
- 235 /// <summary>
- 236 /// Reverses a string
- 237 /// </summary>
- 238 /// <param name="Input">Input string</param>
- 239 /// <returns>The reverse of the input string</returns>
- 240 public static string Reverse(this string Input)
- 241 {
- 242 return new string(Input.Reverse<char>().ToArray());
- 243 }
- 244
- 245 #endregion
- 246
- 247 #region FilterOutText
- 248
- 249 /// <summary>
- 250 /// Removes the filter text from the input.
- 251 /// </summary>
- 252 /// <param name="Input">Input text</param>
- 253 /// <param name="Filter">Regex expression of text to filter out</param>
- 254 /// <returns>The input text minus the filter text.</returns>
- 255 public static string FilterOutText(this string Input, string Filter)
- 256 {
- 257 if (string.IsNullOrEmpty(Input))
- 258 return "";
- 259 return string.IsNullOrEmpty(Filter) ? Input : new Regex(Filter).Replace(Input, "");
- 260 }
- 261
- 262 #endregion
- 263
- 264 #region KeepFilterText
- 265
- 266 /// <summary>
- 267 /// Removes everything that is not in the filter text from the input.
- 268 /// </summary>
- 269 /// <param name="Input">Input text</param>
- 270 /// <param name="Filter">Regex expression of text to keep</param>
- 271 /// <returns>The input text minus everything not in the filter text.</returns>
- 272 public static string KeepFilterText(this string Input, string Filter)
- 273 {
- 274 if (string.IsNullOrEmpty(Input) || string.IsNullOrEmpty(Filter))
- 275 return "";
- 276 Regex TempRegex = new Regex(Filter);
- 277 MatchCollection Collection = TempRegex.Matches(Input);
- 278 StringBuilder Builder = new StringBuilder();
- 279 foreach (Match Match in Collection)
- 280 Builder.Append(Match.Value);
- 281 return Builder.ToString();
- 282 }
- 283
- 284 #endregion
- 285
- 286 #region AlphaNumericOnly
- 287
- 288 /// <summary>
- 289 /// Keeps only alphanumeric characters
- 290 /// </summary>
- 291 /// <param name="Input">Input string</param>
- 292 /// <returns>the string only containing alphanumeric characters</returns>
- 293 public static string AlphaNumericOnly(this string Input)
- 294 {
- 295 return Input.KeepFilterText("[a-zA-Z0-9]");
- 296 }
- 297
- 298 #endregion
- 299
- 300 #region AlphaCharactersOnly
- 301
- 302 /// <summary>
- 303 /// Keeps only alpha characters
- 304 /// </summary>
- 305 /// <param name="Input">Input string</param>
- 306 /// <returns>the string only containing alpha characters</returns>
- 307 public static string AlphaCharactersOnly(this string Input)
- 308 {
- 309 return Input.KeepFilterText("[a-zA-Z]");
- 310 }
- 311
- 312 #endregion
- 313
- 314 #region NumericOnly
- 315
- 316 /// <summary>
- 317 /// Keeps only numeric characters
- 318 /// </summary>
- 319 /// <param name="Input">Input string</param>
- 320 /// <param name="KeepNumericPunctuation">Determines if decimal places should be kept</param>
- 321 /// <returns>the string only containing numeric characters</returns>
- 322 public static string NumericOnly(this string Input, bool KeepNumericPunctuation = true)
- 323 {
- 324 return KeepNumericPunctuation ? Input.KeepFilterText(@"[0-9\.]") : Input.KeepFilterText("[0-9]");
- 325 }
- 326
- 327 #endregion
- 328
- 329 #region IsUnicode
- 330
- 331 /// <summary>
- 332 /// Determines if a string is unicode
- 333 /// </summary>
- 334 /// <param name="Input">Input string</param>
- 335 /// <returns>True if it's unicode, false otherwise</returns>
- 336 public static bool IsUnicode(this string Input)
- 337 {
- 338 return string.IsNullOrEmpty(Input) ? true : Regex.Replace(Input, @"[^\u0000-\u007F]", "") != Input;
- 339 }
- 340
- 341 #endregion
- 342
- 343 #region FormatString
- 344
- 345 /// <summary>
- 346 /// Formats a string based on a format string passed in:
- 347 /// # = digits
- 348 /// @ = alpha characters
- 349 /// \ = escape char
- 350 /// </summary>
- 351 /// <param name="Input">Input string</param>
- 352 /// <param name="Format">Format of the output string</param>
- 353 /// <returns>The formatted string</returns>
- 354 public static string FormatString(this string Input, string Format)
- 355 {
- 356 return new GenericStringFormatter().Format(Input, Format);
- 357 }
- 358
- 359 #endregion
- 360
- 361 #region RegexFormat
- 362
- 363 /// <summary>
- 364 /// Uses a regex to format the input string
- 365 /// </summary>
- 366 /// <param name="Input">Input string</param>
- 367 /// <param name="Format">Regex string used to</param>
- 368 /// <param name="OutputFormat">Output format</param>
- 369 /// <param name="Options">Regex options</param>
- 370 /// <returns>The input string formatted by using the regex string</returns>
- 371 public static string RegexFormat(this string Input, string Format, string OutputFormat, RegexOptions Options = RegexOptions.None)
- 372 {
- 373 Input.ThrowIfNullOrEmpty("Input");
- 374 return Regex.Replace(Input, Format, OutputFormat, Options);
- 375 }
- 376
- 377 #endregion
- 378
- 379 #region 转换
- 380 /// <summary>
- 381 /// 全角转半角
- 382 /// </summary>
- 383 /// <param name="input">要转换的字符串</param>
- 384 /// <returns>转换完的字符串</returns>
- 385 public static string Narrow(this string input)
- 386 {
- 387 return Strings.StrConv(input, VbStrConv.Narrow, 0);
- 388 }
- 389 /// <summary>
- 390 /// 半角转全角
- 391 /// </summary>
- 392 /// <param name="input">要转换的字符串</param>
- 393 /// <returns>转换完的字符串</returns>
- 394 public static string Wide(this string input)
- 395 {
- 396 return Strings.StrConv(input, VbStrConv.Wide, 0);
- 397 }
- 398 /// <summary>
- 399 /// 简体转繁体
- 400 /// </summary>
- 401 /// <param name="input"></param>
- 402 /// <returns></returns>
- 403 public static string TraditionalChinese(this string input)
- 404 {
- 405 return Strings.StrConv(input, VbStrConv.TraditionalChinese, 0);
- 406 }
- 407 /// <summary>
- 408 /// 繁体转简体
- 409 /// </summary>
- 410 /// <param name="input"></param>
- 411 /// <returns></returns>
- 412 public static string SimplifiedChinese(this string input)
- 413 {
- 414 return Strings.StrConv(input, VbStrConv.SimplifiedChinese, 0);
- 415 }
- 416 /// <summary>
- 417 /// 将每个单词首字母大写
- 418 /// </summary>
- 419 /// <param name="input"></param>
- 420 /// <returns></returns>
- 421 public static string ProperCase(this string input)
- 422 {
- 423 return Strings.StrConv(input, VbStrConv.ProperCase, 0);
- 424 }
- 425 #endregion
- 426
- 427 #endregion
- 428 }
- 429 }