截取固定长度的复杂字符串
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();
}
}
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();
}
}
相关文章推荐
- css截取固定长度字符串
- ASP.net:截取固定长度字符串显示在页面,多余部分显示为省略号
- c# 截取 字符串 固定长度 中英混合
- 字符串截取固定长度的方法(C#)
- ASP.net:截取固定长度字符串显示在页面,多余部分显示为省略号
- 字符串截取固定长度的方法(C#)
- 字符串截取固定长度的方法
- C#中实现截取固定长度字节数的字符串
- CSS截取固定长度字符串
- 字符串截取固定长度的方法
- 截取固定长度字符串显示在页面,多余部分显示为省略号(区分汉字和字符)
- 截取字符串使其显示为固定长度加...显示
- 字符串截取固定长度的方法(C#)
- 字符串处理:中英文混排固定长度截取问题
- 字符串截取固定长度的方法
- 截取固定长度字符串显示在页面,多余部分显示为省略号(区分汉字和字符)
- c# 超长字符串截取固定长度后显示...(超长后面显示点点点) 通用方法
- 截取固定长度字符串显示在页面,多余部分显示为省略号(区分汉字和字符)
- ASP.net:截取固定长度字符串显示在页面,多余部分显示为省略号
- 字符串截取固定长度的方法(C#)