C# 字符串截取

这个是项目中用到时,写的一个类;希望对于新人的所帮助,

下面直接上代码了,由于仓促不足之处,希望大家批评!

对了大家注意下,这个长度是在您的需求下乘以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;
        }
    }

 

posted @ 2011-09-28 11:29  程序员老李  阅读(786)  评论(0编辑  收藏  举报