您的位置:首页 > 其它

截取固定长度的复杂字符串

2010-09-28 17:05 441 查看
public static string GetContentSummary(string content, int length, bool StripHTML) {
if (string.IsNullOrEmpty(content) || length == 0)
return "";
if (StripHTML) {
Regex re = new Regex("<[^>]*>");
content = re.Replace(content, "");
content = content.Replace(" ", "").Replace(" ", "");
content = content.Replace("/r/n", " ");
if (content.Length <= length)
return content;
else
return content.Substring(0, length) + "……";
}
else {
if (content.Length <= length)
return content;

int pos = 0, npos = 0, size = 0;
bool firststop = false, notr = false, noli = false;
StringBuilder sb = new StringBuilder();
while (true) {
if (pos >= content.Length)
break;
string cur = content.Substring(pos, 1);
if (cur == "<") {
string next = content.Substring(pos + 1, 3).ToLower();
if (next.IndexOf("p") == 0 && next.IndexOf("pre") != 0) {
npos = content.IndexOf(">", pos) + 1;
}
else if (next.IndexOf("/p") == 0 && next.IndexOf("/pr") != 0) {
npos = content.IndexOf(">", pos) + 1;
if (size < length)
sb.Append("<br/>");
}
else if (next.IndexOf("br") == 0) {
npos = content.IndexOf(">", pos) + 1;
if (size < length)
sb.Append("<br/>");
}
else if (next.IndexOf("img") == 0) {
npos = content.IndexOf(">", pos) + 1;
if (size < length) {
sb.Append(content.Substring(pos, npos - pos));
size += npos - pos + 1;
}
}
else if (next.IndexOf("li") == 0 || next.IndexOf("/li") == 0) {
npos = content.IndexOf(">", pos) + 1;
if (size < length) {
sb.Append(content.Substring(pos, npos - pos));
}
else {
if (!noli && next.IndexOf("/li") == 0) {
sb.Append(content.Substring(pos, npos - pos));
noli = true;
}
}
}
else if (next.IndexOf("tr") == 0 || next.IndexOf("/tr") == 0) {
npos = content.IndexOf(">", pos) + 1;
if (size < length) {
sb.Append(content.Substring(pos, npos - pos));
}
else {
if (!notr && next.IndexOf("/tr") == 0) {
sb.Append(content.Substring(pos, npos - pos));
notr = true;
}
}
}
else if (next.IndexOf("td") == 0 || next.IndexOf("/td") == 0) {
npos = content.IndexOf(">", pos) + 1;
if (size < length) {
sb.Append(content.Substring(pos, npos - pos));
}
else {
if (!notr) {
sb.Append(content.Substring(pos, npos - pos));
}
}
}
else {
npos = content.IndexOf(">", pos) + 1;
sb.Append(content.Substring(pos, npos - pos));
}
if (npos <= pos)
npos = pos + 1;
pos = npos;
}
else {
if (size < length) {
sb.Append(cur);
size++;
}
else {
if (!firststop) {
sb.Append("……");
firststop = true;
}
}
pos++;
}

}
return sb.ToString();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: