首页 > 学院 > 开发设计 > 正文

StringHelper类,内容截取,特别适合资讯展示列表

2019-11-17 01:26:30
字体:
来源:转载
供稿:网友

StringHelper类,内容截取,特别适合资讯展示列表

public class StringHelper { /// <summary> /// 截字符串 /// </summary> /// <param name="sInString">字符串</param> /// <param name="iCutLength">截几个字</param> /// <returns>截好的字符串</returns> public static string CutStr(object sInStrings, int iCutLength) {

string sInString = sInStrings.ToString(); if (sInString == null || sInString.Length == 0 || iCutLength <= 0) return ""; int iCount = System.Text.Encoding.Default.GetByteCount(sInString); if (iCount > iCutLength) { int iLength = 0; for (int i = 0; i < sInString.Length; i++) { int iCharLength = System.Text.Encoding.Default.GetByteCount(new char[] { sInString[i] }); iLength += iCharLength; if (iLength == iCutLength) //需要截取的和总字符串位数相等 { sInString = sInString.Substring(0, i + 1); break; } else if (iLength > iCutLength)//需要截取的小于总字符长度 { sInString = sInString.Substring(0, i) + "...";//。。。 break; } } } return sInString; }

/// <summary> /// 按字节长度截取字符串(支持截取带HTML代码样式的字符串) /// </summary> /// <param name=”param”>将要截取的字符串参数</param> /// <param name=”length”>截取的字节长度</param> /// <param name=”end”>字符串末尾补上的字符串</param>此处写死了,可放开 /// <returns>返回截取后的字符串</returns> public static string SubstringToHTML(string param, int length) { string end = "..."; string Pattern = null; MatchCollection m = null; StringBuilder result = new StringBuilder(); int n = 0; char temp; bool isCode = false; //是不是HTML代码 bool isHTML = false; //是不是HTML特殊字符,如&nbsp; char[] pchar = param.ToCharArray(); for (int i = 0; i < pchar.Length; i++) { temp = pchar[i]; if (temp == '<') { isCode = true; } else if (temp == '&') { isHTML = true; } else if (temp == '>' && isCode) { n -= 1; isCode = false; } else if (temp == ';' && isHTML) { isHTML = false; }

if (!isCode && !isHTML) { n = n + 1; //UNICODE码字符占两个字节 if (System.Text.Encoding.Default.GetBytes(temp + "").Length > 1) { n = n + 1; } }

result.Append(temp); if (n >= length) { break; } } result.Append(end); //取出截取字符串中的HTML标记 string temp_result = result.ToString().Replace("(>)[^<>]*(<?)", "$1$2"); //去掉不需要结素标记的HTML标记 temp_result = temp_result.Replace(@"</?(AREA|BASE|BASEFONT|BODY|BR|COL|COLGROUP|DD|DT|FRAME|HEAD|HR|HTML

|IMG|INPUT|ISINDEX|LI|LINK|META|OPTION|P|PARAM|TBODY|TD|TFOOT|TH|THEAD

|TR|area|base|basefont|body|br|col|colgroup|dd|dt|frame|head|hr|html|img|input|isindex|li|link|meta

|option|p|param|tbody|td|tfoot|th|thead|tr)[^<>]*/?>", ""); //去掉成对的HTML标记 temp_result = temp_result.Replace(@"<([a-zA-Z]+)[^<>]*>(.*?)</1>", "$2"); //用正则表达式取出标记 Pattern = ("<([a-zA-Z]+)[^<>]*>"); m = Regex.Matches(temp_result, Pattern); ArrayList enDHTML = new ArrayList(); foreach (Match mt in m) { endHTML.Add(mt.Result("$1")); } //补全不成对的HTML标记 for (int i = endHTML.Count - 1; i >= 0; i--) { result.Append("</"); result.Append(endHTML[i]); result.Append(">"); } return result.ToString(); }

}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表