一个非常好的C#字符串操作处理类StringHelper.cs

  1  /// <summary>  
  2 /// 类说明:Assistant  
  3 /// 编 码 人:苏飞  
  4 /// 联系方式:361983679    
  5 /// 更新网站:http://www.sufeinet.com/thread-655-1-1.html  
  6 /// </summary>  
  7 using System;  
  8 using System.Collections.Generic;  
  9 using System.Text;  
 10 using System.Text.RegularExpressions;  
 11   
 12 namespace DotNet.Utilities  
 13 {  
 14     /// <summary>  
 15     /// 字符串操作类  
 16     /// 1、GetStrArray(string str, char speater, bool toLower)  把字符串按照分隔符转换成 List  
 17     /// 2、GetStrArray(string str) 把字符串转 按照, 分割 换为数据  
 18     /// 3、GetArrayStr(List list, string speater) 把 List 按照分隔符组装成 string  
 19     /// 4、GetArrayStr(List list)  得到数组列表以逗号分隔的字符串  
 20     /// 5、GetArrayValueStr(Dictionary<int, int> list)得到数组列表以逗号分隔的字符串  
 21     /// 6、DelLastComma(string str)删除最后结尾的一个逗号  
 22     /// 7、DelLastChar(string str, string strchar)删除最后结尾的指定字符后的字符  
 23     /// 8、ToSBC(string input)转全角的函数(SBC case)  
 24     /// 9、ToDBC(string input)转半角的函数(SBC case)  
 25     /// 10、GetSubStringList(string o_str, char sepeater)把字符串按照指定分隔符装成 List 去除重复  
 26     /// 11、GetCleanStyle(string StrList, string SplitString)将字符串样式转换为纯字符串  
 27     /// 12、GetNewStyle(string StrList, string NewStyle, string SplitString, out string Error)将字符串转换为新样式  
 28     /// 13、SplitMulti(string str, string splitstr)分割字符串  
 29     /// 14、SqlSafeString(string String, bool IsDel)  
 30     /// </summary>  
 31     public class StringHelper  
 32     {  
 33         /// <summary>  
 34         /// 把字符串按照分隔符转换成 List  
 35         /// </summary>  
 36         /// <param name="str">源字符串</param>  
 37         /// <param name="speater">分隔符</param>  
 38         /// <param name="toLower">是否转换为小写</param>  
 39         /// <returns></returns>  
 40         public static List<string> GetStrArray(string str, char speater, bool toLower)  
 41         {  
 42             List<string> list = new List<string>();  
 43             string[] ss = str.Split(speater);  
 44             foreach (string s in ss)  
 45             {  
 46                 if (!string.IsNullOrEmpty(s) && s != speater.ToString())  
 47                 {  
 48                     string strVal = s;  
 49                     if (toLower)  
 50                     {  
 51                         strVal = s.ToLower();  
 52                     }  
 53                     list.Add(strVal);  
 54                 }  
 55             }  
 56             return list;  
 57         }  
 58         /// <summary>  
 59         /// 把字符串转 按照, 分割 换为数据  
 60         /// </summary>  
 61         /// <param name="str"></param>  
 62         /// <returns></returns>  
 63         public static string[] GetStrArray(string str)  
 64         {  
 65             return str.Split(new Char[] { ',' });  
 66         }  
 67         /// <summary>  
 68         /// 把 List<string> 按照分隔符组装成 string  
 69         /// </summary>  
 70         /// <param name="list"></param>  
 71         /// <param name="speater"></param>  
 72         /// <returns></returns>  
 73         public static string GetArrayStr(List<string> list, string speater)  
 74         {  
 75             StringBuilder sb = new StringBuilder();  
 76             for (int i = 0; i < list.Count; i++)  
 77             {  
 78                 if (i == list.Count - 1)  
 79                 {  
 80                     sb.Append(list[i]);  
 81                 }  
 82                 else  
 83                 {  
 84                     sb.Append(list[i]);  
 85                     sb.Append(speater);  
 86                 }  
 87             }  
 88             return sb.ToString();  
 89         }  
 90         /// <summary>  
 91         /// 得到数组列表以逗号分隔的字符串  
 92         /// </summary>  
 93         /// <param name="list"></param>  
 94         /// <returns></returns>  
 95         public static string GetArrayStr(List<int> list)  
 96         {  
 97             StringBuilder sb = new StringBuilder();  
 98             for (int i = 0; i < list.Count; i++)  
 99             {  
100                 if (i == list.Count - 1)  
101                 {  
102                     sb.Append(list[i].ToString());  
103                 }  
104                 else  
105                 {  
106                     sb.Append(list[i]);  
107                     sb.Append(",");  
108                 }  
109             }  
110             return sb.ToString();  
111         }  
112         /// <summary>  
113         /// 得到数组列表以逗号分隔的字符串  
114         /// </summary>  
115         /// <param name="list"></param>  
116         /// <returns></returns>  
117         public static string GetArrayValueStr(Dictionary<int, int> list)  
118         {  
119             StringBuilder sb = new StringBuilder();  
120             foreach (KeyValuePair<int, int> kvp in list)  
121             {  
122                 sb.Append(kvp.Value + ",");  
123             }  
124             if (list.Count > 0)  
125             {  
126                 return DelLastComma(sb.ToString());  
127             }  
128             else  
129             {  
130                 return "";  
131             }  
132         }  
133  
134         #region 删除最后一个字符之后的字符  
135   
136         /// <summary>  
137         /// 删除最后结尾的一个逗号  
138         /// </summary>  
139         public static string DelLastComma(string str)  
140         {  
141             return str.Substring(0, str.LastIndexOf(","));  
142         }  
143   
144         /// <summary>  
145         /// 删除最后结尾的指定字符后的字符  
146         /// </summary>  
147         public static string DelLastChar(string str, string strchar)  
148         {  
149             return str.Substring(0, str.LastIndexOf(strchar));  
150         }  
151  
152         #endregion  
153   
154         /// <summary>  
155         /// 转全角的函数(SBC case)  
156         /// </summary>  
157         /// <param name="input"></param>  
158         /// <returns></returns>  
159         public static string ToSBC(string input)  
160         {  
161             //半角转全角:  
162             char[] c = input.ToCharArray();  
163             for (int i = 0; i < c.Length; i++)  
164             {  
165                 if (c[i] == 32)  
166                 {  
167                     c[i] = (char)12288;  
168                     continue;  
169                 }  
170                 if (c[i] < 127)  
171                     c[i] = (char)(c[i] + 65248);  
172             }  
173             return new string(c);  
174         }  
175   
176         /// <summary>  
177         ///  转半角的函数(SBC case)  
178         /// </summary>  
179         /// <param name="input">输入</param>  
180         /// <returns></returns>  
181         public static string ToDBC(string input)  
182         {  
183             char[] c = input.ToCharArray();  
184             for (int i = 0; i < c.Length; i++)  
185             {  
186                 if (c[i] == 12288)  
187                 {  
188                     c[i] = (char)32;  
189                     continue;  
190                 }  
191                 if (c[i] > 65280 && c[i] < 65375)  
192                     c[i] = (char)(c[i] - 65248);  
193             }  
194             return new string(c);  
195         }  
196   
197         /// <summary>  
198         /// 把字符串按照指定分隔符装成 List 去除重复  
199         /// </summary>  
200         /// <param name="o_str"></param>  
201         /// <param name="sepeater"></param>  
202         /// <returns></returns>  
203         public static List<string> GetSubStringList(string o_str, char sepeater)  
204         {  
205             List<string> list = new List<string>();  
206             string[] ss = o_str.Split(sepeater);  
207             foreach (string s in ss)  
208             {  
209                 if (!string.IsNullOrEmpty(s) && s != sepeater.ToString())  
210                 {  
211                     list.Add(s);  
212                 }  
213             }  
214             return list;  
215         }  
216  
217  
218         #region 将字符串样式转换为纯字符串  
219         /// <summary>  
220         ///  将字符串样式转换为纯字符串  
221         /// </summary>  
222         /// <param name="StrList"></param>  
223         /// <param name="SplitString"></param>  
224         /// <returns></returns>  
225         public static string GetCleanStyle(string StrList, string SplitString)  
226         {  
227             string RetrunValue = "";  
228             //如果为空,返回空值  
229             if (StrList == null)  
230             {  
231                 RetrunValue = "";  
232             }  
233             else  
234             {  
235                 //返回去掉分隔符  
236                 string NewString = "";  
237                 NewString = StrList.Replace(SplitString, "");  
238                 RetrunValue = NewString;  
239             }  
240             return RetrunValue;  
241         }  
242         #endregion  
243  
244         #region 将字符串转换为新样式  
245         /// <summary>  
246         /// 将字符串转换为新样式  
247         /// </summary>  
248         /// <param name="StrList"></param>  
249         /// <param name="NewStyle"></param>  
250         /// <param name="SplitString"></param>  
251         /// <param name="Error"></param>  
252         /// <returns></returns>  
253         public static string GetNewStyle(string StrList, string NewStyle, string SplitString, out string Error)  
254         {  
255             string ReturnValue = "";  
256             //如果输入空值,返回空,并给出错误提示  
257             if (StrList == null)  
258             {  
259                 ReturnValue = "";  
260                 Error = "请输入需要划分格式的字符串";  
261             }  
262             else  
263             {  
264                 //检查传入的字符串长度和样式是否匹配,如果不匹配,则说明使用错误。给出错误信息并返回空值  
265                 int strListLength = StrList.Length;  
266                 int NewStyleLength = GetCleanStyle(NewStyle, SplitString).Length;  
267                 if (strListLength != NewStyleLength)  
268                 {  
269                     ReturnValue = "";  
270                     Error = "样式格式的长度与输入的字符长度不符,请重新输入";  
271                 }  
272                 else  
273                 {  
274                     //检查新样式中分隔符的位置  
275                     string Lengstr = "";  
276                     for (int i = 0; i < NewStyle.Length; i++)  
277                     {  
278                         if (NewStyle.Substring(i, 1) == SplitString)  
279                         {  
280                             Lengstr = Lengstr + "," + i;  
281                         }  
282                     }  
283                     if (Lengstr != "")  
284                     {  
285                         Lengstr = Lengstr.Substring(1);  
286                     }  
287                     //将分隔符放在新样式中的位置  
288                     string[] str = Lengstr.Split(',');  
289                     foreach (string bb in str)  
290                     {  
291                         StrList = StrList.Insert(int.Parse(bb), SplitString);  
292                     }  
293                     //给出最后的结果  
294                     ReturnValue = StrList;  
295                     //因为是正常的输出,没有错误  
296                     Error = "";  
297                 }  
298             }  
299             return ReturnValue;  
300         }  
301         #endregion  
302   
303         /// <summary>  
304         /// 分割字符串  
305         /// </summary>  
306         /// <param name="str"></param>  
307         /// <param name="splitstr"></param>  
308         /// <returns></returns>  
309         public static string[] SplitMulti(string str, string splitstr)  
310         {  
311             string[] strArray = null;  
312             if ((str != null) && (str != ""))  
313             {  
314                 strArray = new Regex(splitstr).Split(str);  
315             }  
316             return strArray;  
317         }  
318         public static string SqlSafeString(string String, bool IsDel)  
319         {  
320             if (IsDel)  
321             {  
322                 String = String.Replace("'", "");  
323                 String = String.Replace("\"", "");  
324                 return String;  
325             }  
326             String = String.Replace("'", "'");  
327             String = String.Replace("\"", """);  
328             return String;  
329         }  
330  
331         #region 获取正确的Id,如果不是正整数,返回0  
332         /// <summary>  
333         /// 获取正确的Id,如果不是正整数,返回0  
334         /// </summary>  
335         /// <param name="_value"></param>  
336         /// <returns>返回正确的整数ID,失败返回0</returns>  
337         public static int StrToId(string _value)  
338         {  
339             if (IsNumberId(_value))  
340                 return int.Parse(_value);  
341             else  
342                 return 0;  
343         }  
344         #endregion  
345         #region 检查一个字符串是否是纯数字构成的,一般用于查询字符串参数的有效性验证。  
346         /// <summary>  
347         /// 检查一个字符串是否是纯数字构成的,一般用于查询字符串参数的有效性验证。(0除外)  
348         /// </summary>  
349         /// <param name="_value">需验证的字符串。。</param>  
350         /// <returns>是否合法的bool值。</returns>  
351         public static bool IsNumberId(string _value)  
352         {  
353             return QuickValidate("^[1-9]*[0-9]*$", _value);  
354         }  
355         #endregion  
356         #region 快速验证一个字符串是否符合指定的正则表达式。  
357         /// <summary>  
358         /// 快速验证一个字符串是否符合指定的正则表达式。  
359         /// </summary>  
360         /// <param name="_express">正则表达式的内容。</param>  
361         /// <param name="_value">需验证的字符串。</param>  
362         /// <returns>是否合法的bool值。</returns>  
363         public static bool QuickValidate(string _express, string _value)  
364         {  
365             if (_value == null) return false;  
366             Regex myRegex = new Regex(_express);  
367             if (_value.Length == 0)  
368             {  
369                 return false;  
370             }  
371             return myRegex.IsMatch(_value);  
372         }  
373         #endregion  
374  
375  
376         #region 根据配置对指定字符串进行 MD5 加密  
377         /// <summary>  
378         /// 根据配置对指定字符串进行 MD5 加密  
379         /// </summary>  
380         /// <param name="s"></param>  
381         /// <returns></returns>  
382         public static string GetMD5(string s)  
383         {  
384             //md5加密  
385             s = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5").ToString();  
386   
387             return s.ToLower().Substring(8, 16);  
388         }  
389         #endregion  
390  
391         #region 得到字符串长度,一个汉字长度为2  
392         /// <summary>  
393         /// 得到字符串长度,一个汉字长度为2  
394         /// </summary>  
395         /// <param name="inputString">参数字符串</param>  
396         /// <returns></returns>  
397         public static int StrLength(string inputString)  
398         {  
399             System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();  
400             int tempLen = 0;  
401             byte[] s = ascii.GetBytes(inputString);  
402             for (int i = 0; i < s.Length; i++)  
403             {  
404                 if ((int)s[i] == 63)  
405                     tempLen += 2;  
406                 else  
407                     tempLen += 1;  
408             }  
409             return tempLen;  
410         }  
411         #endregion  
412  
413         #region 截取指定长度字符串  
414         /// <summary>  
415         /// 截取指定长度字符串  
416         /// </summary>  
417         /// <param name="inputString">要处理的字符串</param>  
418         /// <param name="len">指定长度</param>  
419         /// <returns>返回处理后的字符串</returns>  
420         public static string ClipString(string inputString, int len)  
421         {  
422             bool isShowFix = false;  
423             if (len % 2 == 1)  
424             {  
425                 isShowFix = true;  
426                 len--;  
427             }  
428             System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();  
429             int tempLen = 0;  
430             string tempString = "";  
431             byte[] s = ascii.GetBytes(inputString);  
432             for (int i = 0; i < s.Length; i++)  
433             {  
434                 if ((int)s[i] == 63)  
435                     tempLen += 2;  
436                 else  
437                     tempLen += 1;  
438   
439                 try  
440                 {  
441                     tempString += inputString.Substring(i, 1);  
442                 }  
443                 catch  
444                 {  
445                     break;  
446                 }  
447   
448                 if (tempLen > len)  
449                     break;  
450             }  
451   
452             byte[] mybyte = System.Text.Encoding.Default.GetBytes(inputString);  
453             if (isShowFix && mybyte.Length > len)  
454                 tempString += "";  
455             return tempString;  
456         }  
457         #endregion  
458  
459  
460  
461         #region HTML转行成TEXT  
462         /// <summary>  
463         /// HTML转行成TEXT  
464         /// </summary>  
465         /// <param name="strHtml"></param>  
466         /// <returns></returns>  
467         public static string HtmlToTxt(string strHtml)  
468         {  
469             string[] aryReg ={  
470             @"<script[^>]*?>.*?</script>",  
471             @"<(\/\s*)?!?((\w+:)?\w+)(\w+(\s*=?\s*(([""'])(\\[""'tbnr]|[^\7])*?\7|\w+)|.{0})|\s)*?(\/\s*)?>",  
472             @"([\r\n])[\s]+",  
473             @"&(quot|#34);",  
474             @"&(amp|#38);",  
475             @"&(lt|#60);",  
476             @"&(gt|#62);",   
477             @"&(nbsp|#160);",   
478             @"&(iexcl|#161);",  
479             @"&(cent|#162);",  
480             @"&(pound|#163);",  
481             @"&(copy|#169);",  
482             @"&#(\d+);",  
483             @"-->",  
484             @"<!--.*\n"  
485             };  
486   
487             string newReg = aryReg[0];  
488             string strOutput = strHtml;  
489             for (int i = 0; i < aryReg.Length; i++)  
490             {  
491                 Regex regex = new Regex(aryReg[i], RegexOptions.IgnoreCase);  
492                 strOutput = regex.Replace(strOutput, string.Empty);  
493             }  
494   
495             strOutput.Replace("<", "");  
496             strOutput.Replace(">", "");  
497             strOutput.Replace("\r\n", "");  
498   
499   
500             return strOutput;  
501         }  
502         #endregion  
503  
504         #region 判断对象是否为空  
505         /// <summary>  
506         /// 判断对象是否为空,为空返回true  
507         /// </summary>  
508         /// <typeparam name="T">要验证的对象的类型</typeparam>  
509         /// <param name="data">要验证的对象</param>          
510         public static bool IsNullOrEmpty<T>(T data)  
511         {  
512             //如果为null  
513             if (data == null)  
514             {  
515                 return true;  
516             }  
517   
518             //如果为""  
519             if (data.GetType() == typeof(String))  
520             {  
521                 if (string.IsNullOrEmpty(data.ToString().Trim()))  
522                 {  
523                     return true;  
524                 }  
525             }  
526   
527             //如果为DBNull  
528             if (data.GetType() == typeof(DBNull))  
529             {  
530                 return true;  
531             }  
532   
533             //不为空  
534             return false;  
535         }  
536   
537         /// <summary>  
538         /// 判断对象是否为空,为空返回true  
539         /// </summary>  
540         /// <param name="data">要验证的对象</param>  
541         public static bool IsNullOrEmpty(object data)  
542         {  
543             //如果为null  
544             if (data == null)  
545             {  
546                 return true;  
547             }  
548   
549             //如果为""  
550             if (data.GetType() == typeof(String))  
551             {  
552                 if (string.IsNullOrEmpty(data.ToString().Trim()))  
553                 {  
554                     return true;  
555                 }  
556             }  
557   
558             //如果为DBNull  
559             if (data.GetType() == typeof(DBNull))  
560             {  
561                 return true;  
562             }  
563   
564             //不为空  
565             return false;  
566         }  
567         #endregion  
568     }  
569 }  

 

posted @ 2017-07-28 11:04  俺老刘  阅读(4159)  评论(0编辑  收藏  举报