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;
        }
    }

 

你可能感兴趣的:(字符串截取)