C# 字符串截取
2011-09-28 11:29
183 查看
这个是项目中用到时,写的一个类;希望对于新人的所帮助,
下面直接上代码了,由于仓促不足之处,希望大家批评!
对了大家注意下,这个长度是在您的需求下乘以2来;
也就是您要截取10个字符时,这里要用2/10的值,主要考虑的是很中文显示时的效果处理的,有其它的需求您可以自行修改
/// <summary>
/// 处理中英文件混排时的字符长度截取
/// </summary>
[Serializable]
public static class CustomerSubStirng
{
/// <summary>
/// 截取符合英文长度显示的字符串
/// </summary>
/// <param name="item">要截取的字符串</param>
/// <param name="start">起始位置</param>
/// <param name="byteLen">截取的长度</param>
/// <param name="styleString">字符串尾部样式</param>
/// <returns>返回截取后的字符串</returns>
public static String NormalizeSubString(String item, int start, int byteLen,string styleString=null)
{
if (String.IsNullOrEmpty(item) || start < 0 || byteLen < 0 || start > item.Length || byteLen > item.Length - start)
{
return "参数错误";
}
byteLen = Normalize(item, start, byteLen);
if (byteLen > 0 && byteLen > start)
{
return item.Substring(start, byteLen) + styleString;
}
return item;
}
/// <summary>
/// 判断是否为中文字符
/// </summary>
/// <param name="c">要判断的字节</param>
/// <returns>中文时返回true否则为fasle</returns>
private static bool IsChinese(char c)
{
return (int)c >= 0x4E00 && (int)c <= 0x9FA5;
}
/// <summary>
/// 计算以英文字符显示为基准的,当中英混排时,实际应该截取长度值
/// </summary>
/// <param name="item">要截取的字符串</param>
/// <param name="start">起始位置</param>
/// <param name="byteLen">截取的长度</param>
/// <returns>实际截取的长度</returns>
private static int Normalize(String item, int start, int byteLen)
{
char[] charItem = item.ToCharArray();
byte[] chArray = Encoding.Default.GetBytes(item);
int length = 0;
int i = 0;
while (byteLen > 0)
{
if (i >= charItem.Length)
break;
length++;
if (IsChinese(charItem[i]))
{
byteLen -= 2;
continue;
}
byteLen--;
i++;
}
return length;
}
}
下面直接上代码了,由于仓促不足之处,希望大家批评!
对了大家注意下,这个长度是在您的需求下乘以2来;
也就是您要截取10个字符时,这里要用2/10的值,主要考虑的是很中文显示时的效果处理的,有其它的需求您可以自行修改
/// <summary>
/// 处理中英文件混排时的字符长度截取
/// </summary>
[Serializable]
public static class CustomerSubStirng
{
/// <summary>
/// 截取符合英文长度显示的字符串
/// </summary>
/// <param name="item">要截取的字符串</param>
/// <param name="start">起始位置</param>
/// <param name="byteLen">截取的长度</param>
/// <param name="styleString">字符串尾部样式</param>
/// <returns>返回截取后的字符串</returns>
public static String NormalizeSubString(String item, int start, int byteLen,string styleString=null)
{
if (String.IsNullOrEmpty(item) || start < 0 || byteLen < 0 || start > item.Length || byteLen > item.Length - start)
{
return "参数错误";
}
byteLen = Normalize(item, start, byteLen);
if (byteLen > 0 && byteLen > start)
{
return item.Substring(start, byteLen) + styleString;
}
return item;
}
/// <summary>
/// 判断是否为中文字符
/// </summary>
/// <param name="c">要判断的字节</param>
/// <returns>中文时返回true否则为fasle</returns>
private static bool IsChinese(char c)
{
return (int)c >= 0x4E00 && (int)c <= 0x9FA5;
}
/// <summary>
/// 计算以英文字符显示为基准的,当中英混排时,实际应该截取长度值
/// </summary>
/// <param name="item">要截取的字符串</param>
/// <param name="start">起始位置</param>
/// <param name="byteLen">截取的长度</param>
/// <returns>实际截取的长度</returns>
private static int Normalize(String item, int start, int byteLen)
{
char[] charItem = item.ToCharArray();
byte[] chArray = Encoding.Default.GetBytes(item);
int length = 0;
int i = 0;
while (byteLen > 0)
{
if (i >= charItem.Length)
break;
length++;
if (IsChinese(charItem[i]))
{
byteLen -= 2;
continue;
}
byteLen--;
i++;
}
return length;
}
}
相关文章推荐
- c# 字符串 截取总结
- c#截取字符串
- C#几个经常用到的字符串截取
- C#和VB.net实现根据字节数截取字符串
- C#几个经常用到的字符串截取
- 用C#写的字符串截取函数
- C# 截取字符串——
- C#字符串处理:截取、替换、移除
- C#字符串截取
- 用C#截取指定长度的中英文混合字符串
- C#中Split用法~用字符串分隔,截取...
- c#截取字符串函数 以及将每段字符串插入到数据库
- C# 字符串截取
- 不破坏HTML结构的情况下等长截取字符串(C#正则表达式实现)
- 用C#截取指定长度的中英文混合字符串
- C#截取指定长度中英文字符串方法
- C#几个经常用到的字符串的截取
- C#截取指定长度中英文字符串方法
- python字符串操作,以及截取对应的C#函数
- 在C#中截取指定长度的中文字符串(效率提高2500倍)