您的位置:首页 > 编程语言 > C#

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: