一个stringhelp类!

mac2022-06-30  63

转自:http://developer.coreweb.com/articles/Default5.aspx

using System;using System.Collections.Generic;using System.Security.Cryptography;using System.Text;using System.Text.RegularExpressions;using System.Web;using System.Xml;

namespace CoreWebLibrary.String{   /// <summary>   /// Helper functions for String not already found in C#.   /// Inspired by PHP String Functions that are missing in .Net.   /// </summary>   public static class StringHelper   {      /// <summary>      /// Base64 encodes a string.      /// </summary>      /// <param name="input">A string</param>      /// <returns>A base64 encoded string</returns>      public static string Base64StringEncode(string input)      {         byte[] encbuff = System.Text.Encoding.UTF8.GetBytes(input);         return Convert.ToBase64String(encbuff);      }

      /// <summary>      /// Base64 decodes a string.      /// </summary>      /// <param name="input">A base64 encoded string</param>      /// <returns>A decoded string</returns>      public static string Base64StringDecode(string input)      {         byte[] decbuff = Convert.FromBase64String(input);         return System.Text.Encoding.UTF8.GetString(decbuff);      }

      /// <summary>      /// A case insenstive replace function.      /// </summary>      /// <param name="input">The string to examine.</param>      /// <param name="newValue">The value to replace.</param>      /// <param name="oldValue">The new value to be inserted</param>      /// <returns>A string</returns>      public static string CaseInsenstiveReplace(string input,          string newValue, string oldValue)      {         Regex regEx = new Regex(oldValue,             RegexOptions.IgnoreCase | RegexOptions.Multiline);         return regEx.Replace(input, newValue);      }

      /// <summary>      /// Replaces the first occurence of a string with the replacement value. The Replace      /// is case senstive      /// </summary>      /// <param name="input">The string to examine</param>      /// <param name="oldValue">The value to replace</param>      /// <param name="newValue">the new value to be inserted</param>      /// <returns>A string</returns>      public static string ReplaceFirst(string input, string oldValue, string newValue)      {         Regex regEx = new Regex(oldValue, RegexOptions.Multiline);         return regEx.Replace(input, newValue, 1);      }

      /// <summary>      /// Replaces the last occurence of a string with the replacement value.      /// The replace is case senstive.      /// </summary>      /// <param name="input">The string to examine</param>      /// <param name="oldValue">The value to replace</param>      /// <param name="newValue">the new value to be inserted</param>      /// <returns>A string</returns>      public static string ReplaceLast(string input, string oldValue, string newValue)      {         int index = input.LastIndexOf(oldValue);         if (index < 0)         {            return input;         }         else         {            StringBuilder sb = new StringBuilder(input.Length - oldValue.Length + newValue.Length);            sb.Append(input.Substring(0, index));            sb.Append(newValue);            sb.Append(input.Substring(index + oldValue.Length,                input.Length - index - oldValue.Length));                        return sb.ToString();         }      }

      /// <summary>      /// Removes all the words passed in the filter words       /// parameters. The replace is NOT case      /// sensitive.      /// </summary>      /// <param name="input">The string to search.</param>      /// <param name="filterWords">The words to       /// repace in the input string.</param>      /// <returns>A string.</returns>      public static string FilterWords(string input,          params string[] filterWords)      {         return StringHelper.FilterWords(input,             char.MinValue, filterWords);      }

      /// <summary>      /// Removes all the words passed in the filter words       /// parameters. The replace is NOT case      /// sensitive.      /// </summary>      /// <param name="input">The string to search.</param>      /// <param name="mask">A character that is inserted for each       /// letter of the replaced word.</param>      /// <param name="filterWords">The words to       // repace in the input string.</param>      /// <returns>A string.</returns>      public static string FilterWords(string input, char mask,          params string[] filterWords)      {         string stringMask = mask == char.MinValue ?             string.Empty : mask.ToString();         string totalMask = stringMask;

         foreach (string s in filterWords)         {            Regex regEx = new Regex(s,                RegexOptions.IgnoreCase | RegexOptions.Multiline);

            if (stringMask.Length > 0)            {               for (int i = 1; i < s.Length; i++)                  totalMask += stringMask;            }

            input = regEx.Replace(input, totalMask);

            totalMask = stringMask;         }

         return input;      }

      /// <summary>      /// Checks the passed string to see if has any of the       /// passed words. Not case-sensitive.      /// </summary>      /// <param name="input">The string to check.</param>      /// <param name="hasWords">The words to check for.</param>      /// <returns>A collection of the matched words.</returns>      public static MatchCollection HasWords(string input,          params string[] hasWords)      {         StringBuilder sb = new StringBuilder(hasWords.Length + 50);         //sb.Append("[");

         foreach (string s in hasWords)         {            sb.AppendFormat("({0})|",                StringHelper.HtmlSpecialEntitiesEncode(s.Trim()));         }

         string pattern = sb.ToString();         pattern = pattern.TrimEnd('|'); // +"]";

         Regex regEx = new Regex(pattern,             RegexOptions.IgnoreCase | RegexOptions.Multiline);         return regEx.Matches(input);      }

      /// <summary>      /// A wrapper around HttpUtility.HtmlEncode      /// </summary>      /// <param name="input">The string to be encoded</param>      /// <returns>An encoded string</returns>      public static string HtmlSpecialEntitiesEncode(string input)      {         return HttpUtility.HtmlEncode(input);      }

      /// <summary>      /// A wrapper around HttpUtility.HtmlDecode      /// </summary>      /// <param name="input">The string to be decoded</param>      /// <returns>The decode string</returns>      public static string HtmlSpecialEntitiesDecode(string input)      {         return HttpUtility.HtmlDecode(input);      }

      /// <summary>      /// MD5 encodes the passed string      /// </summary>      /// <param name="input">The string to encode.</param>      /// <returns>An encoded string.</returns>      public static string MD5String(string input)      {         // Create a new instance of the          // MD5CryptoServiceProvider object.         MD5 md5Hasher = MD5.Create();

         // Convert the input string to a byte          // array and compute the hash.         byte[] data = md5Hasher.ComputeHash(            Encoding.Default.GetBytes(input));

         // Create a new Stringbuilder to collect the bytes         // and create a string.         StringBuilder sBuilder = new StringBuilder();

         // Loop through each byte of the hashed data          // and format each one as a hexadecimal string.         for (int i = 0; i < data.Length; i++)         {            sBuilder.Append(data[i].ToString("x2"));         }

         // Return the hexadecimal string.         return sBuilder.ToString();      }

      /// <summary>      /// Verified a string against the passed MD5 hash.      /// </summary>      /// <param name="input">The string to compare.</param>      /// <param name="hash">The hash to compare against.</param>      /// <returns>True if the input and the hash       /// are the same, false otherwise.</returns>      public static bool MD5VerifyString(string input, string hash)      {         // Hash the input.         string hashOfInput = StringHelper.MD5String(input);

         // Create a StringComparer an comare the hashes.         StringComparer comparer = StringComparer.OrdinalIgnoreCase;

         if (0 == comparer.Compare(hashOfInput, hash))         {            return true;         }         else         {            return false;         }      }

      /// <summary>      /// Left pads the passed input using the HTML       /// non-breaking string entity ( )      /// for the total number of spaces.      /// </summary>      /// <param name="input">The string to pad.</param>      /// <param name="totalSpaces">The total number       /// to pad the string.</param>      /// <returns>A padded string.</returns>      public static string PadLeftHtmlSpaces(string input,          int totalSpaces)      {         string space = " ";         return PadLeft(input, space, totalSpaces * space.Length);      }

      /// <summary>      /// Left pads the passed input using the passed pad string      /// for the total number of spaces.  It will not       /// cut-off the pad even if it       /// causes the string to exceed the total width.      /// </summary>      /// <param name="input">The string to pad.</param>      /// <param name="pad">The string to uses as padding.</param>      /// <param name="totalSpaces">The total number to       /// pad the string.</param>      /// <returns>A padded string.</returns>      public static string PadLeft(string input,          string pad, int totalWidth)      {         return StringHelper.PadLeft(input, pad, totalWidth, false);      }

      /// <summary>      /// Left pads the passed input using the passed pad string      /// for the total number of spaces.  It will       /// cut-off the pad so that        /// the string does not exceed the total width.      /// </summary>      /// <param name="input">The string to pad.</param>      /// <param name="pad">The string to uses as padding.</param>      /// <param name="totalSpaces">The total number to       /// pad the string.</param>      /// <returns>A padded string.</returns>      public static string PadLeft(string input, string pad,          int totalWidth, bool cutOff)      {         if (input.Length >= totalWidth)            return input;

         int padCount = pad.Length;         string paddedString = input;

         while (paddedString.Length < totalWidth)         {            paddedString += pad;         }

         // trim the excess.         if (cutOff)            paddedString = paddedString.Substring(0, totalWidth);

         return paddedString;      }

      /// <summary>      /// Right pads the passed input using the HTML       /// non-breaking string entity ( )      /// for the total number of spaces.      /// </summary>      /// <param name="input">The string to pad.</param>      /// <param name="totalSpaces">The total number       /// to pad the string.</param>      /// <returns>A padded string.</returns>      public static string PadRightHtmlSpaces(string input,          int totalSpaces)      {         string space = " ";         return PadRight(input, space, totalSpaces * space.Length);      }

      /// <summary>      /// Right pads the passed input using the passed pad string      /// for the total number of spaces.  It will not       /// cut-off the pad even if it       /// causes the string to exceed the total width.      /// </summary>      /// <param name="input">The string to pad.</param>      /// <param name="pad">The string to uses as padding.</param>      /// <param name="totalSpaces">The total number to       /// pad the string.</param>      /// <returns>A padded string.</returns>      public static string PadRight(string input,          string pad, int totalWidth)      {         return StringHelper.PadRight(input, pad, totalWidth, false);      }

      /// <summary>      /// Right pads the passed input using the passed pad string      /// for the total number of spaces.  It will cut-off      /// the pad so that        /// the string does not exceed the total width.      /// </summary>      /// <param name="input">The string to pad.</param>      /// <param name="pad">The string to uses as padding.</param>      /// <param name="totalSpaces">The total number to       /// pad the string.</param>      /// <returns>A padded string.</returns>      public static string PadRight(string input, string pad,          int totalWidth, bool cutOff)      {         if (input.Length >= totalWidth)            return input;

         string paddedString = string.Empty;

         while (paddedString.Length < totalWidth - input.Length)         {            paddedString += pad;         }

         // trim the excess.         if (cutOff)            paddedString = paddedString.Substring(0,                totalWidth - input.Length);

         paddedString += input;

         return paddedString;      }

      /// <summary>      /// Removes the new line (\n) and carriage return (\r) symbols.      /// </summary>      /// <param name="input">The string to search.</param>      /// <returns>A string</returns>      public static string RemoveNewLines(string input)      {         return StringHelper.RemoveNewLines(input, false);      }

      /// <summary>      /// Removes the new line (\n) and carriage return       /// (\r) symbols.      /// </summary>      /// <param name="input">The string to search.</param>      /// <param name="addSpace">If true, adds a space       /// (" ") for each newline and carriage      /// return found.</param>      /// <returns>A string</returns>      public static string RemoveNewLines(string input,          bool addSpace)      {         string replace = string.Empty;         if (addSpace)            replace = " ";

         string pattern = @"[\r|\n]";         Regex regEx = new Regex(pattern,             RegexOptions.IgnoreCase | RegexOptions.Multiline);

         return regEx.Replace(input, replace);      }

      /// <summary>      /// Reverse a string.      /// </summary>      /// <param name="input">The string to reverse</param>      /// <returns>A string</returns>      /// <remarks>Thanks to  Alois Kraus for pointing out an issue      /// with an earlier version of this method and to Justin Roger's       /// site (http://weblogs.asp.net/justin_rogers/archive/2004/06/10/153175.aspx)      /// for helping me to improve that previous method.</remarks>      public static string Reverse(string input)      {         char[] reverse = new char[input.Length];         for (int i = 0, k = input.Length - 1; i < input.Length; i++, k--)         {            if (char.IsSurrogate(input[k]))            {               reverse[i + 1] = input[k--];               reverse[i++] = input[k];            }            else            {               reverse[i] = input[k];            }         }         return new System.String(reverse);      }

      /// <summary>      /// Converts a string to sentence case.      /// </summary>      /// <param name="input">The string to convert.</param>      /// <returns>A string</returns>      public static string SentenceCase(string input)      {         if (input.Length < 1)            return input;

         string sentence = input.ToLower();         return sentence[0].ToString().ToUpper() +             sentence.Substring(1);      }

      /// <summary>      /// Converts all spaces to HTML non-breaking spaces      /// </summary>      /// <param name="input">The string to convert.</param>      /// <returns>A string</returns>      public static string SpaceToNbsp(string input)      {         string space = " ";         return input.Replace(" ", space);      }

      /// <summary>      /// Removes all HTML tags from the passed string      /// </summary>      /// <param name="input">The string whose       /// values should be replaced.</param>      /// <returns>A string.</returns>      public static string StripTags(string input)      {         Regex stripTags = new Regex("<(.|\n)+?>");         return stripTags.Replace(input, "");      }

      /// <summary>      /// Converts a string to title case.      /// </summary>      /// <param name="input">The string to convert.</param>      /// <returns>A string.</returns>      public static string TitleCase(string input)      {         return TitleCase(input, true);      }

      /// <summary>      /// Converts a string to title case.      /// </summary>      /// <param name="input">The string to convert.</param>      /// <param name="ignoreShortWords">If true,       /// does not capitalize words like      /// "a", "is", "the", etc.</param>      /// <returns>A string.</returns>      public static string TitleCase(string input,          bool ignoreShortWords)      {         List<string> ignoreWords = null;         if (ignoreShortWords)         {            //TODO: Add more ignore words?            ignoreWords = new List<string>();            ignoreWords.Add("a");            ignoreWords.Add("is");            ignoreWords.Add("was");            ignoreWords.Add("the");         }

         string[] tokens = input.Split(' ');         StringBuilder sb = new StringBuilder(input.Length);         foreach (string s in tokens)         {            if (ignoreShortWords == true                && s != tokens[0]                && ignoreWords.Contains(s.ToLower()))            {               sb.Append(s + " ");            }            else            {               sb.Append(s[0].ToString().ToUpper());               sb.Append(s.Substring(1).ToLower());               sb.Append(" ");            }         }

         return sb.ToString().Trim();      }

      /// <summary>      /// Removes multiple spaces between words      /// </summary>      /// <param name="input">The string to trim.</param>      /// <returns>A string.</returns>      public static string TrimIntraWords(string input)      {         Regex regEx = new Regex(@"[\s]+");         return regEx.Replace(input, " ");      }

      /// <summary>      /// Converts new line(\n) and carriage return(\r) symbols to      /// HTML line breaks.      /// </summary>      /// <param name="input">The string to convert.</param>      /// <returns>A string.</returns>      public static string NewLineToBreak(string input)      {         Regex regEx = new Regex(@"[\n|\r]+");         return regEx.Replace(input, "<br />");      }

      /// <summary>      /// Wraps the passed string at the       /// at the next whitespace on or after the       /// total charCount has been reached      /// for that line.  Uses the environment new line      /// symbol for the break text.      /// </summary>      /// <param name="input">The string to wrap.</param>      /// <param name="charCount">The number of characters       /// per line.</param>      /// <returns>A string.</returns>      public static string WordWrap(string input, int charCount)      {         return StringHelper.WordWrap(input, charCount,             false, Environment.NewLine);      }

      /// <summary>      /// Wraps the passed string at the total       /// number of characters (if cuttOff is true)      /// or at the next whitespace (if cutOff is false).      /// Uses the environment new line      /// symbol for the break text.      /// </summary>      /// <param name="input">The string to wrap.</param>      /// <param name="charCount">The number of characters       /// per line.</param>      /// <param name="cutOff">If true, will break in       /// the middle of a word.</param>      /// <returns>A string.</returns>      public static string WordWrap(string input,          int charCount, bool cutOff)      {         return StringHelper.WordWrap(input, charCount,             cutOff, Environment.NewLine);      }

      /// <summary>      /// Wraps the passed string at the total number       /// of characters (if cuttOff is true)      /// or at the next whitespace (if cutOff is false).      /// Uses the passed breakText      /// for lineBreaks.      /// </summary>      /// <param name="input">The string to wrap.</param>      /// <param name="charCount">The number of       /// characters per line.</param>      /// <param name="cutOff">If true, will break in       /// the middle of a word.</param>      /// <param name="breakText">The line break text to use.</param>      /// <returns>A string.</returns>      public static string WordWrap(string input, int charCount,         bool cutOff, string breakText)      {         StringBuilder sb = new StringBuilder(input.Length + 100);         int counter = 0;

         if (cutOff)         {            while (counter < input.Length)            {               if (input.Length > counter + charCount)               {                  sb.Append(input.Substring(counter, charCount));                  sb.Append(breakText);               }               else               {                  sb.Append(input.Substring(counter));               }               counter += charCount;            }         }         else         {            string[] strings = input.Split(' ');            for (int i = 0; i < strings.Length; i++)            {               // added one to represent the space.               counter += strings[i].Length + 1;                if (i != 0 && counter > charCount)               {                  sb.Append(breakText);                  counter = 0;               }

               sb.Append(strings[i] + ' ');            }         }         // to get rid of the extra space at the end.         return sb.ToString().TrimEnd();       }   }}

转载于:https://www.cnblogs.com/antony1029/archive/2006/11/09/555277.html

相关资源:一个java正则表达式工具类源代码.zip(内含Regexp.java文件)
最新回复(0)