Mercurial > silverbladetech
diff MetroWpf/MetroWpf.Framework/Extensions/StringExtensions.cs @ 15:060f02cd4591
Initial commit, pre airport work
author | stevenh7776 stevenhollidge@hotmail.com |
---|---|
date | Mon, 12 Mar 2012 23:05:21 +0800 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MetroWpf/MetroWpf.Framework/Extensions/StringExtensions.cs Mon Mar 12 23:05:21 2012 +0800 @@ -0,0 +1,524 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Xml; +using System.Xml.Linq; +using System.Xml.XPath; + +namespace MetroWpf +{ + /// <summary> + /// Extension methods for the string data type + /// </summary> + public static class StringExtensions + { + #region · Extensions · + + #region · Common string extensions · + + /// <summary> + /// Determines whether the specified string is null or empty. + /// </summary> + /// <param name="value">The string value to check.</param> + public static bool IsEmpty(this string value) + { + return ((value == null) || (value.Length == 0)); + } + + /// <summary> + /// Determines whether the specified string is not null or empty. + /// </summary> + /// <param name="value">The string value to check.</param> + public static bool IsNotEmpty(this string value) + { + return (value.IsEmpty() == false); + } + + /// <summary> + /// Checks whether the string is empty and returns a default value in case. + /// </summary> + /// <param name="value">The string to check.</param> + /// <param name="defaultValue">The default value.</param> + /// <returns>Either the string or the default value.</returns> + public static string IfEmpty(this string value, string defaultValue) + { + return (value.IsNotEmpty() ? value : defaultValue); + } + + /// <summary> + /// Formats the value with the parameters using string.Format. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="parameters">The parameters.</param> + /// <returns></returns> + public static string FormatWith(this string value, params object[] parameters) + { + return string.Format(value, parameters); + } + + /// <summary> + /// Trims the text to a provided maximum length. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="maxLength">Maximum length.</param> + /// <returns></returns> + /// <remarks>Proposed by Rene Schulte</remarks> + public static string TrimToMaxLength(this string value, int maxLength) + { + return (value == null || value.Length <= maxLength ? value : value.Substring(0, maxLength)); + } + + /// <summary> + /// Trims the text to a provided maximum length and adds a suffix if required. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="maxLength">Maximum length.</param> + /// <param name="suffix">The suffix.</param> + /// <returns></returns> + /// <remarks>Proposed by Rene Schulte</remarks> + public static string TrimToMaxLength(this string value, int maxLength, string suffix) + { + return (value == null || value.Length <= maxLength ? value : string.Concat(value.Substring(0, maxLength), suffix)); + } + + /// <summary> + /// Determines whether the comparison value strig is contained within the input value string + /// </summary> + /// <param name="inputValue">The input value.</param> + /// <param name="comparisonValue">The comparison value.</param> + /// <param name="comparisonType">Type of the comparison to allow case sensitive or insensitive comparison.</param> + /// <returns> + /// <c>true</c> if input value contains the specified value, otherwise, <c>false</c>. + /// </returns> + public static bool Contains(this string inputValue, string comparisonValue, StringComparison comparisonType) + { + return (inputValue.IndexOf(comparisonValue, comparisonType) != -1); + } + + /// <summary> + /// Loads the string into a LINQ to XML XDocument + /// </summary> + /// <param name="xml">The XML string.</param> + /// <returns>The XML document object model (XDocument)</returns> + public static XDocument ToXDocument(this string xml) + { + return XDocument.Parse(xml); + } + + /// <summary> + /// Loads the string into a XML DOM object (XmlDocument) + /// </summary> + /// <param name="xml">The XML string.</param> + /// <returns>The XML document object model (XmlDocument)</returns> + public static XmlDocument ToXmlDOM(this string xml) + { + var document = new XmlDocument(); + + document.LoadXml(xml); + + return document; + } + + /// <summary> + /// Loads the string into a XML XPath DOM (XPathDocument) + /// </summary> + /// <param name="xml">The XML string.</param> + /// <returns>The XML XPath document object model (XPathNavigator)</returns> + public static XPathNavigator ToXPath(this string xml) + { + var document = new XPathDocument(new StringReader(xml)); + + return document.CreateNavigator(); + } + + /// <summary> + /// Reverses / mirrors a string. + /// </summary> + /// <param name="value">The string to be reversed.</param> + /// <returns>The reversed string</returns> + public static string Reverse(this string value) + { + if (value.IsEmpty() || (value.Length == 1)) + { + return value; + } + + var chars = value.ToCharArray(); + + Array.Reverse(chars); + + return new string(chars); + } + + /// <summary> + /// Ensures that a string starts with a given prefix. + /// </summary> + /// <param name="value">The string value to check.</param> + /// <param name="prefix">The prefix value to check for.</param> + /// <returns>The string value including the prefix</returns> + /// <example> + /// <code> + /// var extension = "txt"; + /// var fileName = string.Concat(file.Name, extension.EnsureStartsWith(".")); + /// </code> + /// </example> + public static string EnsureStartsWith(this string value, string prefix) + { + if (value.StartsWith(prefix)) + { + return value; + } + + return string.Concat(prefix, value); + } + + /// <summary> + /// Ensures that a string ends with a given suffix. + /// </summary> + /// <param name="value">The string value to check.</param> + /// <param name="suffix">The suffix value to check for.</param> + /// <returns>The string value including the suffix</returns> + /// <example> + /// <code> + /// var url = "http://www.pgk.de"; + /// url = url.EnsureEndsWith("/")); + /// </code> + /// </example> + public static string EnsureEndsWith(this string value, string suffix) + { + if (value.EndsWith(suffix)) + { + return value; + } + + return string.Concat(value, suffix); + } + + #endregion + + #region · Regex based extension methods · + + /// <summary> + /// Uses regular expressions to determine if the string matches to a given regex pattern. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="regexPattern">The regular expression pattern.</param> + /// <returns> + /// <c>true</c> if the value is matching to the specified pattern; otherwise, <c>false</c>. + /// </returns> + /// <example> + /// <code> + /// var s = "12345"; + /// var isMatching = s.IsMatchingTo(@"^\d+$"); + /// </code> + /// </example> + public static bool IsMatchingTo(this string value, string regexPattern) + { + return IsMatchingTo(value, regexPattern, RegexOptions.None); + } + + /// <summary> + /// Uses regular expressions to determine if the string matches to a given regex pattern. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="regexPattern">The regular expression pattern.</param> + /// <param name="options">The regular expression options.</param> + /// <returns> + /// <c>true</c> if the value is matching to the specified pattern; otherwise, <c>false</c>. + /// </returns> + /// <example> + /// <code> + /// var s = "12345"; + /// var isMatching = s.IsMatchingTo(@"^\d+$"); + /// </code> + /// </example> + public static bool IsMatchingTo(this string value, string regexPattern, RegexOptions options) + { + return Regex.IsMatch(value, regexPattern, options); + } + + /// <summary> + /// Uses regular expressions to replace parts of a string. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="regexPattern">The regular expression pattern.</param> + /// <param name="replaceValue">The replacement value.</param> + /// <returns>The newly created string</returns> + /// <example> + /// <code> + /// var s = "12345"; + /// var replaced = s.ReplaceWith(@"\d", m => string.Concat(" -", m.Value, "- ")); + /// </code> + /// </example> + public static string ReplaceWith(this string value, string regexPattern, string replaceValue) + { + return ReplaceWith(value, regexPattern, replaceValue, RegexOptions.None); + } + + /// <summary> + /// Uses regular expressions to replace parts of a string. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="regexPattern">The regular expression pattern.</param> + /// <param name="replaceValue">The replacement value.</param> + /// <param name="options">The regular expression options.</param> + /// <returns>The newly created string</returns> + /// <example> + /// <code> + /// var s = "12345"; + /// var replaced = s.ReplaceWith(@"\d", m => string.Concat(" -", m.Value, "- ")); + /// </code> + /// </example> + public static string ReplaceWith(this string value, string regexPattern, string replaceValue, RegexOptions options) + { + return Regex.Replace(value, regexPattern, replaceValue, options); + } + + /// <summary> + /// Uses regular expressions to replace parts of a string. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="regexPattern">The regular expression pattern.</param> + /// <param name="evaluator">The replacement method / lambda expression.</param> + /// <returns>The newly created string</returns> + /// <example> + /// <code> + /// var s = "12345"; + /// var replaced = s.ReplaceWith(@"\d", m => string.Concat(" -", m.Value, "- ")); + /// </code> + /// </example> + public static string ReplaceWith(this string value, string regexPattern, MatchEvaluator evaluator) + { + return ReplaceWith(value, regexPattern, RegexOptions.None, evaluator); + } + + /// <summary> + /// Uses regular expressions to replace parts of a string. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="regexPattern">The regular expression pattern.</param> + /// <param name="options">The regular expression options.</param> + /// <param name="evaluator">The replacement method / lambda expression.</param> + /// <returns>The newly created string</returns> + /// <example> + /// <code> + /// var s = "12345"; + /// var replaced = s.ReplaceWith(@"\d", m => string.Concat(" -", m.Value, "- ")); + /// </code> + /// </example> + public static string ReplaceWith(this string value, string regexPattern, RegexOptions options, MatchEvaluator evaluator) + { + return Regex.Replace(value, regexPattern, evaluator, options); + } + + /// <summary> + /// Uses regular expressions to determine all matches of a given regex pattern. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="regexPattern">The regular expression pattern.</param> + /// <returns>A collection of all matches</returns> + public static MatchCollection GetMatches(this string value, string regexPattern) + { + return GetMatches(value, regexPattern, RegexOptions.None); + } + + /// <summary> + /// Uses regular expressions to determine all matches of a given regex pattern. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="regexPattern">The regular expression pattern.</param> + /// <param name="options">The regular expression options.</param> + /// <returns>A collection of all matches</returns> + public static MatchCollection GetMatches(this string value, string regexPattern, RegexOptions options) + { + return Regex.Matches(value, regexPattern, options); + } + + /// <summary> + /// Uses regular expressions to determine all matches of a given regex pattern and returns them as string enumeration. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="regexPattern">The regular expression pattern.</param> + /// <returns>An enumeration of matching strings</returns> + /// <example> + /// <code> + /// var s = "12345"; + /// foreach(var number in s.GetMatchingValues(@"\d")) { + /// Console.WriteLine(number); + /// } + /// </code> + /// </example> + public static IEnumerable<string> GetMatchingValues(this string value, string regexPattern) + { + return GetMatchingValues(value, regexPattern, RegexOptions.None); + } + + /// <summary> + /// Uses regular expressions to determine all matches of a given regex pattern and returns them as string enumeration. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="regexPattern">The regular expression pattern.</param> + /// <param name="options">The regular expression options.</param> + /// <returns>An enumeration of matching strings</returns> + /// <example> + /// <code> + /// var s = "12345"; + /// foreach(var number in s.GetMatchingValues(@"\d")) { + /// Console.WriteLine(number); + /// } + /// </code> + /// </example> + public static IEnumerable<string> GetMatchingValues(this string value, string regexPattern, RegexOptions options) + { + foreach (Match match in GetMatches(value, regexPattern, options)) + { + if (match.Success) + { + yield return match.Value; + } + } + } + + /// <summary> + /// Uses regular expressions to split a string into parts. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="regexPattern">The regular expression pattern.</param> + /// <returns>The splitted string array</returns> + public static string[] Split(this string value, string regexPattern) + { + return value.Split(regexPattern, RegexOptions.None); + } + + /// <summary> + /// Uses regular expressions to split a string into parts. + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="regexPattern">The regular expression pattern.</param> + /// <param name="options">The regular expression options.</param> + /// <returns>The splitted string array</returns> + public static string[] Split(this string value, string regexPattern, RegexOptions options) + { + return Regex.Split(value, regexPattern, options); + } + + /// <summary> + /// Splits the given string into words and returns a string array. + /// </summary> + /// <param name="value">The input string.</param> + /// <returns>The splitted string array</returns> + public static string[] GetWords(this string value) + { + return value.Split(@"\W"); + } + + /// <summary> + /// Gets the nth "word" of a given string, where "words" are substrings separated by a given separator + /// </summary> + /// <param name="value">The string from which the word should be retrieved.</param> + /// <param name="index">Index of the word (0-based).</param> + /// <returns> + /// The word at position n of the string. + /// Trying to retrieve a word at a position lower than 0 or at a position where no word exists results in an exception. + /// </returns> + /// <remarks>Originally contributed by MMathews</remarks> + public static string GetWordByIndex(this string value, int index) + { + var words = value.GetWords(); + + if ((index < 0) || (index > words.Length - 1)) + { + throw new IndexOutOfRangeException("The word number is out of range."); + } + + return words[index]; + } + + #endregion + + #region · Bytes & Base64 · + + /// <summary> + /// Converts the string to a byte-array using the default encoding + /// </summary> + /// <param name="value">The input string.</param> + /// <returns>The created byte array</returns> + public static byte[] ToBytes(this string value) + { + return value.ToBytes(null); + } + + /// <summary> + /// Converts the string to a byte-array using the supplied encoding + /// </summary> + /// <param name="value">The input string.</param> + /// <param name="encoding">The encoding to be used.</param> + /// <returns>The created byte array</returns> + /// <example><code> + /// var value = "Hello World"; + /// var ansiBytes = value.ToBytes(Encoding.GetEncoding(1252)); // 1252 = ANSI + /// var utf8Bytes = value.ToBytes(Encoding.UTF8); + /// </code></example> + public static byte[] ToBytes(this string value, Encoding encoding) + { + encoding = (encoding ?? Encoding.Default); + return encoding.GetBytes(value); + } + + /// <summary> + /// Encodes the input value to a Base64 string using the default encoding. + /// </summary> + /// <param name="value">The input value.</param> + /// <returns>The Base 64 encoded string</returns> + public static string EncodeBase64(this string value) + { + return value.EncodeBase64(null); + } + + /// <summary> + /// Encodes the input value to a Base64 string using the supplied encoding. + /// </summary> + /// <param name="value">The input value.</param> + /// <param name="encoding">The encoding.</param> + /// <returns>The Base 64 encoded string</returns> + public static string EncodeBase64(this string value, Encoding encoding) + { + encoding = (encoding ?? Encoding.UTF8); + + var bytes = encoding.GetBytes(value); + + return Convert.ToBase64String(bytes); + } + + /// <summary> + /// Decodes a Base 64 encoded value to a string using the default encoding. + /// </summary> + /// <param name="encodedValue">The Base 64 encoded value.</param> + /// <returns>The decoded string</returns> + public static string DecodeBase64(this string encodedValue) + { + return encodedValue.DecodeBase64(null); + } + + /// <summary> + /// Decodes a Base 64 encoded value to a string using the supplied encoding. + /// </summary> + /// <param name="encodedValue">The Base 64 encoded value.</param> + /// <param name="encoding">The encoding.</param> + /// <returns>The decoded string</returns> + public static string DecodeBase64(this string encodedValue, Encoding encoding) + { + encoding = (encoding ?? Encoding.UTF8); + + var bytes = Convert.FromBase64String(encodedValue); + + return encoding.GetString(bytes); + } + + #endregion + + #endregion + } +} \ No newline at end of file