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特殊字符,如
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();
}
}
}
StringHelper类,内容截取,特别适合资讯展示列表的更多相关文章
- 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建
数据库的创建和sql语句增删改查 1. 载入驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, nam ...
- ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象
http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value (存一个对象的时候key存) 将哈希 ...
- 开源:矿Android新闻client,快、小、支持离线阅读、操作简单、内容丰富,形式多样展示、的信息量、全功能 等待(离开码邮箱)
分享:矿Android新闻client.快.小.支持离线阅读.操作简单.内容丰富,形式多样展示.的信息量.全功能 等待(离开码邮箱) 历时30天我为了开发这个新闻clientAPP,下面简称觅闻 ht ...
- javascript 如何打印、输出数组内容(将数组内容以字符串的形式展示出来)
1.情景展示 在实际开发过程中,为了调试,有时我们需要看数组中具体包含了哪些数据,但是, 如果我们直接打印该数组对象,显示的结果却不是我们想要的. 如何才能将数组内容打印出来呢?(将数组内容以 ...
- 使用Bootstrap 3开发响应式网站实践05,使用Tab、Modal、Form展示内容,使用Popover、Tooltip展示提示信息
本篇体验用Tab插件显示内容.Html部分为: <div class="row" id="moreInfo"> <div class=&quo ...
- React入门 (2)—实现微博展示列表
前言 如果从来不了解React先看前篇React入门 (1)-使用指南(包括ES5和ES6对比). 本文为了能将前篇学到的react知识学以致用,做了一个类似微博展示列表的demo.使用的是ES6+R ...
- 微信小程序信息展示列表
微信小程序信息展示列表 效果展示: 代码展示: wxml <view class="head"> <view class="head_item" ...
- crm --- 1.admin , 展示列表 和 分页
一.admin (创建超级用户) 1.注册: 1.创建一个超级管理员,使用如下命令: python manage.py createsuperuser 2.输入打算使用的登录名: username:m ...
- Python3执行DOS命令并截取其输出到一个列表字符串,同时写入一个文件
#执行DOS命令并截取其输出到一个列表字符串,同时写入一个文件#这个功能很有用listing=os.popen('ipconfig').readlines()for i in listing: pri ...
随机推荐
- poj 3667 Hotel
昨天学习了线段树的延迟标记: 发现自己还有区间合并没有学: 抓紧时间学习一下: 代码: #include<cstdio> #include<algorithm> #define ...
- Milk Patterns
poj3261:http://poj.org/problem?id=3261 题意:给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠. 题解:还是用后缀数组,求H和后缀数组,然后二 ...
- Java OAuth开发包资料
原文地址:http://www.oschina.net/project/tag/307/oauth?lang=19&sort=time
- h.264并行解码算法2D-Wave实现(基于多核非共享内存系统)
在<Scalable Parallel Programming Applied to H.264/AVC Decoding>书中,作者基于双芯片18核的Cell BE系统实现了2D-Wav ...
- java学习面向对象之抽象类
什么是抽象类,之所以说抽象就是具体的反义词喽~抽象离我们最近的距离也就是初中的时候学过的美术课,抽象画派.拿一桶画彩就这么往画布上一泼,那就是抽象.那么java世界当中什么是抽象呢?我们再拿动物还有狗 ...
- 【转】Android 驱动开发系列四
原文网址:http://www.2cto.com/kf/201304/202040.html 时隔多日,终于都抽出时间来写blog了.废话不多说,接着上一篇,这里将介绍如何编写HAL层(硬件抽象层)对 ...
- winphone 开发学习笔记(1)
学习了winphone task 1.首先根据自己电脑下载sdk,,,win 7和win 8的Sdk安装包不一样, http://www.microsoft.com/en-hk/download/de ...
- Json 的日期格式转换成DateTime
JSON 的日期形式:”/Date(1242357713797+0800)/” , 下面我们就用以下C#的方法将他转换成DateTime类型: /// <summary> /// Json ...
- 4种字符串匹配算法:BS朴素 Rabin-karp(上)
字符串的匹配的算法一直都是比较基础的算法,我们本科数据结构就学过了严蔚敏的KMP算法.KMP算法应该是最高效的一种算法,但是确实稍微有点难理解.所以打算,开这个博客,一步步的介绍4种匹配的算法.也是& ...
- Google Picasa
本博文的主要内容有 .Google Picasa的下载 .Google Picasa的安装 .Google Picasa的使用 Google 的免费图片管理工具Picasa,数秒钟内就可找到并欣赏计算 ...