using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Printing;
using System.Globalization;
using System.Text;
namespace CommonTool
{
public sealed class UtilStr
{
///
/// 得到该对象的字符串,在字符串的两边加上“[”“]”
///
/// 处理的对象
/// 字符串
public static string GetDelimitedStr(object poObject)
{
return ("[" + poObject + "]");
}
///
/// 连接连个对象的字符串型,并把他们连接成一个字符串返回出来。
///
///
///
///
public static string JoinString(object poFirst, object poSecond)
{
return string.Format("[{0}],[{1}]", poFirst.ToString().Trim(), poSecond.ToString().Trim());
}
///
/// 将一个对象以字符串形式与另外一个字符串进行连接,并添加“[”,“]”标识符号
///
/// 被连接的字符串
/// 连接的字符串
/// 返回值
public static string AddStr(string pcSource, object poTobeAppended)
{
string lcStr = GetDelimitedStr(poTobeAppended);
pcSource = pcSource.Trim();
if (pcSource == "")
{
return lcStr;
}
if ((pcSource[0] == '[') && (pcSource[pcSource.Length - 1] == ']'))
{
return (pcSource + string.Format(",[{0}]", poTobeAppended.ToString().Trim()));
}
return JoinString(pcSource, poTobeAppended);
}
///
/// 直接连接两个字符串
///
///
///
///
public static string AppendToStr(string pcSource, object poTobeAppended)
{
string lcStr = GetDelimitedStr(poTobeAppended);
pcSource = pcSource.Trim();
if (pcSource != "")
{
lcStr = pcSource + "," + lcStr;
}
return lcStr;
}
///
/// 将一个Array转换成字符串,默认分割符为","
///
///
///
public static string ArrayToStr(Array paStr)
{
return ArrayToStrEx(paStr, ",");
}
///
/// 根据传入的分割符号将Array 转换成字符串
///
///
///
///
public static string ArrayToStrEx(Array paStr, string pcSeparator)
{
string lcStr = "";
foreach (string lcStr2 in paStr)
{
lcStr = lcStr + ((lcStr == "") ? "" : pcSeparator) + GetDelimitedStr(lcStr2);
}
return lcStr;
}
///
/// 将字符串转换成Array 对象 ,以","为分割符。
///
///
///
public static Array StrToArray(string str)
{
return StrToArrayEx(str, ",");
}
///
/// 将一个字符串以分割符转换成Array对象,如 a,[b,[c,d]],e 将分割成 a ; b,[c,d] ; e 三个串
///
///
///
///
public static Array StrToArrayEx(string str, string separator)
{
ArrayList list1 = new ArrayList();
str = str?.Trim() ?? "";
int num1 = separator.Length;
while (str.Length > 0)
{
int num2 = str.IndexOf(separator, StringComparison.Ordinal);
int num3 = str.IndexOf("[", StringComparison.Ordinal);
if ((num3 >= 0) && (num3 < num2))
{
int num4 = 1;
int num5 = str.Length;
int num6 = num3 + 1;
while (num6 < num5)
{
switch (str[num6])
{
case '[':
num4++;
goto Label_0082;
case '\\':
goto Label_0082;
case ']':
break;
default:
goto Label_0082;
}
num4--;
Label_0082:
if (num4 == 0)
{
break;
}
num6++;
}
num2 = str.IndexOf(separator, num6, StringComparison.Ordinal);
}
if (num2 < 0)
{
num2 = str.Length;
}
string text1 = str.Substring(0, num2);
int num7 = text1.Length;
if (((num7 > 0) && (text1[0] == '[')) && (text1[num7 - 1] == ']'))
{
text1 = text1.Substring(1, num7 - 2);
}
list1.Add(text1.Trim());
if ((num2 + num1) > str.Length)
{
str = "";
}
else
{
str = str.Substring(num2 + num1).Trim();
}
}
Array array1 = Array.CreateInstance(typeof(string), list1.Count);
list1.CopyTo(array1);
return array1;
}
///
/// 将字符串转换成 Color 对象
///
///
///
public static Color ColorFromStr(string str)
{
Color color1 = Color.Black;
Array array1 = StrToArray(str);
if (array1.Length >= 3)
{
int num1 = (int)Utils.ValD((string)array1.GetValue(0));
int num2 = (int)Utils.ValD((string)array1.GetValue(1));
int num3 = (int)Utils.ValD((string)array1.GetValue(2));
color1 = Color.FromArgb(num1, num2, num3);
}
return color1;
}
///
/// Translate Color to String
///
///
///
public static string ColorToStr(Color color)
{
return (color.R.ToString() + "," + color.G.ToString() + "," + color.B.ToString());
}
///
/// 从pcSource 末尾移除 pcRemoveStr
///
///
///
///
public static string TrimEnd(string pcSource, string pcRemoveStr)
{
char[] chArray1 = pcRemoveStr.ToCharArray();
return pcSource.TrimEnd(chArray1);
}
///
/// 字符串转换成日期格式
///
///
///
public static DateTime StrToDt(string pcStr)
{
DateTime dateTime = new DateTime(1900, 1, 1);
try
{
dateTime= DateTime.Parse(pcStr);
return dateTime;
}
catch (Exception)
{
// ignored
}
return dateTime;
}
///
/// 将 piCount 个 pcString 串成一个字符串
///
///
///
///
public static string Replicate(string pcString, int piCount)
{
string text1 = "";
for (int i = 0; i < piCount; i++)
{
text1 = text1 + pcString;
}
return text1;
}
///
/// Translate RectangleF to string
///
///
///
public static string RectToStr(RectangleF rect)
{
return (rect.X.ToString(CultureInfo.InvariantCulture) + "," + rect.Y.ToString(CultureInfo.InvariantCulture) + "," + rect.Width.ToString(CultureInfo.InvariantCulture) + "," + rect.Height.ToString(CultureInfo.InvariantCulture));
}
///
/// Translate string to RectangleF
///
///
///
public static RectangleF RectFromStr(string str)
{
Array array1 = StrToArray(str);
RectangleF ef1 = new Rectangle(0, 0, 0, 0);
if (array1.Length >= 4)
{
ef1.X = (float)Utils.ValD((string)array1.GetValue(0));
ef1.Y = (float)Utils.ValD((string)array1.GetValue(1));
ef1.Width = (float)Utils.ValD((string)array1.GetValue(2));
ef1.Height = (float)Utils.ValD((string)array1.GetValue(3));
}
return ef1;
}
///
/// PrinterSettings To String
///
///
///
public static string PrinterSettingToStr(PrinterSettings poSetting)
{
string text1 = "";
text1 = AppendToStr(text1, "PrinterName=" + poSetting.PrinterName);
text1 = AppendToStr(text1, "FromPage=" + poSetting.FromPage.ToString());
text1 = AppendToStr(text1, "ToPage=" + poSetting.ToPage.ToString());
return AppendToStr(text1, "Copies=" + poSetting.Copies.ToString());
}
///
/// String To PrinterSettings
///
///
///
public static PrinterSettings PrinterSettingFromStr(string pcString)
{
PrinterSettings settings1 = new PrinterSettings();
Array array1 = StrToArray(pcString);
foreach (string text1 in array1)
{
Array array2 = StrToArrayEx(text1, "=");
if (array2.Length == 2)
{
string text2 = array2.GetValue(0).ToString();
string text3 = array2.GetValue(1).ToString();
string text4 = string.IsInterned(text2);
if (text4 != null)
{
//text4 = string.IsInterned(text4);
if (text4 == "PrinterName")
{
settings1.PrinterName = text3;
}
else
{
if (text4 == "FromPage")
{
settings1.FromPage = Utils.ValI(text3);
continue;
}
if (text4 == "ToPage")
{
settings1.ToPage = Utils.ValI(text3);
continue;
}
if (text4 == "Copies")
{
settings1.Copies = (short)Utils.ValI(text3);
}
}
}
}
}
return settings1;
}
public static string PrinterPageSettingToStr(PrinterSettings poPrinter, PageSettings poPage)
{
if (poPage == null)
{
return ("[" + PrinterSettingToStr(poPrinter) + "],[Default]");
}
return ("[" + PrinterSettingToStr(poPrinter) + "],[" + PageSettingToStr(poPage) + "]");
}
public static string PageSettingToStr(PageSettings poSetting)
{
string text1 = "";
text1 = AppendToStr(text1, "LeftMargin=" + poSetting.Margins.Left.ToString());
text1 = AppendToStr(text1, "TopMargin=" + poSetting.Margins.Top.ToString());
text1 = AppendToStr(text1, "RightMargin=" + poSetting.Margins.Right.ToString());
text1 = AppendToStr(text1, "BottomMargin=" + poSetting.Margins.Bottom.ToString());
text1 = AppendToStr(text1, "PaperSize=" + PaperSizeToStr(poSetting.PaperSize));
text1 = AppendToStr(text1, "Landscape=" + (poSetting.Landscape ? "Yes" : "No"));
return AppendToStr(text1, "PaperSource=" + poSetting.PaperSource.SourceName);
}
public static string PaperSizeToStr(PaperSize poPaper)
{
return JoinString(poPaper.Kind.ToString(), poPaper.Width.ToString(), poPaper.Height.ToString());
}
///
/// 将 几个对象的字符以 [],[],[],[] 格式连接起来
///
///
///
///
///
///
public static string JoinString(object poFirst, object poSecond, object poThird, object poFourth)
{
return string.Format("[{0}],[{1}], [{2}], [{3}]", new object[] { poFirst.ToString().Trim(), poSecond.ToString().Trim(), poThird.ToString().Trim(), poFourth.ToString().Trim() });
}
///
/// 将 几个对象的字符以 [],[],[],[] 格式连接起来
///
///
///
///
///
public static string JoinString(object poFirst, object poSecond, object poThird)
{
return string.Format("[{0}],[{1}], [{2}]", poFirst.ToString().Trim(), poSecond.ToString().Trim(), poThird.ToString().Trim());
}
public static string FontToStr(Font font)
{
string text1 = "Name:" + font.Name + ",Size:" + font.Size.ToString(CultureInfo.InvariantCulture);
if (font.Underline)
{
text1 = text1 + ",Underline:Y";
}
if (font.Italic)
{
text1 = text1 + ",Italic:Y";
}
if (font.Strikeout)
{
text1 = text1 + ",Strikeout:Y";
}
if (font.Bold)
{
text1 = text1 + ",Bold:Y";
}
return text1;
}
///
/// 字符串转换成 Font 型
///
/// 传入字符串
/// 返回的font
///
public static Font FontFromStr(string str)
{
Array array1 = StrToArray(str);
Hashtable hashtable1 = new Hashtable();
for (int num1 = 0; num1 < array1.Length; num1++)
{
Array array2 = StrToArrayEx(array1.GetValue(num1).ToString(), ":");
if (array2.Length == 2)
{
hashtable1.Add(array2.GetValue(0), array2.GetValue(1));
}
}
string text1 = FontFamily.GenericSansSerif.Name;
if (hashtable1.ContainsKey("Name"))
{
text1 = hashtable1["Name"].ToString();
}
float single1 = 8f;
if (hashtable1.ContainsKey("Size"))
{
single1 = (float)Utils.ValD(hashtable1["Size"].ToString());
}
FontStyle style1 = FontStyle.Regular;
if (hashtable1.ContainsKey("Bold"))
{
string text2 = hashtable1["Bold"].ToString();
if (text2 == "Y")
{
style1 |= FontStyle.Bold;
}
}
if (hashtable1.ContainsKey("Italic"))
{
string text3 = hashtable1["Italic"].ToString();
if (text3 == "Y")
{
style1 |= FontStyle.Italic;
}
}
if (hashtable1.ContainsKey("Underline"))
{
string text4 = hashtable1["Underline"].ToString();
if (text4 == "Y")
{
style1 |= FontStyle.Underline;
}
}
if (hashtable1.ContainsKey("Strikeout"))
{
string text5 = hashtable1["Strikeout"].ToString();
if (text5 == "Y")
{
style1 |= FontStyle.Strikeout;
}
}
return new Font(text1, single1, style1);
}
public static string UAndT(object poObject)
{
return UAndT(poObject.ToString());
}
///
/// 将一个字符串转换成大写
///
///
///
public static string UAndT(string pcStr)
{
if (pcStr == null)
{
pcStr = "";
}
return pcStr.ToUpper().Trim();
}
///
/// 111,22,333;aaa,vbb,dssa
///
///
///
///
public static Hashtable StrToHashtable(string pcKeys, string pcValues)
{
Hashtable hashtable1 = null;
Array array1 = StrToArray(pcKeys);
Array array2 = StrToArray(pcValues);
if (array1.Length == array2.Length)
{
hashtable1 = new Hashtable();
for (int i = 0; i < array1.Length; i++)
{
if (!hashtable1.ContainsKey(UAndT(array1.GetValue(i))))
hashtable1.Add(UAndT(array1.GetValue(i)), array2.GetValue(i));
}
}
return hashtable1;
}
public static Dictionary StrToDictionary(string pcKeys, string pcValues)
{
Dictionary loRetVal = null;
Array array1 = StrToArray(pcKeys);
Array array2 = StrToArray(pcValues);
if (array1.Length == array2.Length)
{
loRetVal = new Dictionary();
for (int i = 0; i < array1.Length; i++)
{
if (!loRetVal.ContainsKey(UAndT(array1.GetValue(i))))
loRetVal.Add(UAndT(array1.GetValue(i)), array2.GetValue(i));
}
}
return loRetVal;
}
///
/// 如果 传人的字符 为 TRUE、YES 或者 Y ,1 返回 true。
///
///
///
public static bool StrToBool(string pcStr)
{
pcStr = UAndT(pcStr);
if (((pcStr != "TRUE") && (pcStr != "YES")) && (pcStr != "Y") && (pcStr != "1"))
{
return false;
}
return true;
}
public static string GetItemFromStrEx(string pcStr, int piIndex, string separator)
{
string lcRetVal = "";
Array loArr = StrToArrayEx(pcStr, separator);
if ((piIndex < loArr.Length) && (piIndex >= 0))
{
lcRetVal = loArr.GetValue(piIndex).ToString();
}
return lcRetVal;
}
public static string FormatStr(string pcString)
{
return pcString.Replace("[", "").Replace("]", "").Trim();
}
public static string StrFromObj(object poObj)
{
if (poObj == null)
{
return "";
}
return poObj.ToString().Trim();
}
///
/// 取文本左边内容
///
/// 文本
/// 标识符
/// 左边内容
public static string GetLeft(string str, string s)
{
string temp = str.Substring(0, str.IndexOf(s, StringComparison.Ordinal));
return temp;
}
///
/// 取文本右边内容
///
/// 文本
/// 标识符
/// 右边内容
public static string GetRight(string str, string s)
{
string temp = str.Substring(str.IndexOf(s, StringComparison.Ordinal), str.Length - str.Substring(0, str.IndexOf(s, StringComparison.Ordinal)).Length);
return temp;
}
///
/// 取文本中间内容
///
/// 原文本
/// 左边文本
/// 右边文本
/// 返回中间文本内容
public static string Between(string str, string leftstr, string rightstr)
{
int i = str.IndexOf(leftstr, StringComparison.Ordinal) + leftstr.Length;
string temp = str.Substring(i, str.IndexOf(rightstr, i, StringComparison.Ordinal) - i);
return temp;
}
///
/// 取文本中间到List集合
///
/// 文本字符串
/// 左边文本
/// 右边文本
/// List集合
public List BetweenArr(string str, string leftstr, string rightstr)
{
List list = new List();
int leftIndex = str.IndexOf(leftstr, StringComparison.Ordinal);//左文本起始位置
int leftlength = leftstr.Length;//左文本长度
while (leftIndex != -1)
{
int rightIndex = str.IndexOf(rightstr, leftIndex + leftlength, StringComparison.Ordinal);
if (rightIndex == -1)
{
break;
}
string temp = str.Substring(leftIndex + leftlength, rightIndex - leftIndex - leftlength);
list.Add(temp);
leftIndex = str.IndexOf(leftstr, rightIndex + 1, StringComparison.Ordinal);
}
return list;
}
///
/// 指定文本倒序
///
/// 文本
/// 倒序文本
public static string StrReverse(string str)
{
char[] chars = str.ToCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chars.Length; i++)
{
sb.Append(chars[chars.Length - 1 - i]);
}
return sb.ToString();
}
///
///得到随机字符.
///
///Length of the int.
///if set to true [boo number].
///if set to true [boo sign].
///if set to true [boo smallword].
///if set to true [boo bigword].
///
public static string GetRandomizer(int intLength, bool booNumber, bool booSign, bool booSmallword, bool booBigword)
{
//定义
Random ranA = new Random();
int intResultRound = 0;
string strB = "";
while (intResultRound < intLength)
{
//生成随机数A,表示生成类型
//1=数字,2=符号,3=小写字母,4=大写字母
var intA = ranA.Next(1, 5);
//如果随机数A=1,则运行生成数字
//生成随机数A,范围在0-10
//把随机数A,转成字符
//生成完,位数+1,字符串累加,结束本次循环
if (intA == 1 && booNumber)
{
intA = ranA.Next(0, 10);
strB = intA + strB;
intResultRound = intResultRound + 1;
continue;
}
//如果随机数A=2,则运行生成符号
//生成随机数A,表示生成值域
//1:33-47值域,2:58-64值域,3:91-96值域,4:123-126值域
if (intA == 2 && booSign)
{
intA = ranA.Next(1, 5);
//如果A=1
//生成随机数A,33-47的Ascii码
//把随机数A,转成字符
//生成完,位数+1,字符串累加,结束本次循环
if (intA == 1)
{
intA = ranA.Next(33, 48);
strB = ((char)intA) + strB;
intResultRound = intResultRound + 1;
continue;
}
//如果A=2
//生成随机数A,58-64的Ascii码
//把随机数A,转成字符
//生成完,位数+1,字符串累加,结束本次循环
if (intA == 2)
{
intA = ranA.Next(58, 65);
strB = ((char)intA) + strB;
intResultRound = intResultRound + 1;
continue;
}
//如果A=3
//生成随机数A,91-96的Ascii码
//把随机数A,转成字符
//生成完,位数+1,字符串累加,结束本次循环
if (intA == 3)
{
intA = ranA.Next(91, 97);
strB = ((char)intA) + strB;
intResultRound = intResultRound + 1;
continue;
}
//如果A=4
//生成随机数A,123-126的Ascii码
//把随机数A,转成字符
//生成完,位数+1,字符串累加,结束本次循环
if (intA == 4)
{
intA = ranA.Next(123, 127);
strB = ((char)intA) + strB;
intResultRound = intResultRound + 1;
continue;
}
}
//如果随机数A=3,则运行生成小写字母
//生成随机数A,范围在97-122
//把随机数A,转成字符
//生成完,位数+1,字符串累加,结束本次循环
if (intA == 3 && booSmallword)
{
intA = ranA.Next(97, 123);
strB = ((char)intA) + strB;
intResultRound = intResultRound + 1;
continue;
}
//如果随机数A=4,则运行生成大写字母
//生成随机数A,范围在65-90
//把随机数A,转成字符
//生成完,位数+1,字符串累加,结束本次循环
if (intA == 4 && booBigword)
{
intA = ranA.Next(65, 89);
strB = ((char)intA) + strB;
intResultRound = intResultRound + 1;
}
}
return strB;
}
//随机字符串生成器的主要功能如下:
//1、支持自定义字符串长度
//2、支持自定义是否包含数字
//3、支持自定义是否包含小写字母
//4、支持自定义是否包含大写字母
//5、支持自定义是否包含特殊符号
//6、支持自定义字符集
///
///生成随机字符串
///
///目标字符串的长度
///是否包含数字,1=包含,默认为包含
///是否包含小写字母,1=包含,默认为包含
///是否包含大写字母,1=包含,默认为包含
///是否包含特殊字符,1=包含,默认为不包含
///要包含的自定义字符,直接输入要包含的字符列表
///指定长度的随机字符串
public static string GetRnd(int length, bool useNum, bool useLow, bool useUpp, bool useSpe, string custom)
{
byte[] b = new byte[4];
new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b);
Random r = new Random(BitConverter.ToInt32(b, 0));
string s = null, str = custom;
if (useNum) { str += "0123456789"; }
if (useLow) { str += "abcdefghijklmnopqrstuvwxyz"; }
if (useUpp) { str += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; }
if (useSpe) { str += "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; }
for (int i = 0; i < length; i++)
{
s += str.Substring(r.Next(0, str.Length - 1), 1);
}
return s;
}
}
}