把字符串按半角字符算半个字符,全角字符算一个字符来截取

时间:2023-01-12 07:34:38

公司的网站首页会显示新闻,要求把新闻的标题按半角字符算半个字符,全角字符算一个字符来截短。

想了两种方法,不过觉得效率好像一般。但苦于找不到更好的方法。如果有朋友有更好的方法请指教

第一种是用正则表达式:

把字符串按半角字符算半个字符,全角字符算一个字符来截取把字符串按半角字符算半个字符,全角字符算一个字符来截取     /**/ /// <summary>
把字符串按半角字符算半个字符,全角字符算一个字符来截取        
/// 将标题按全角字符当一个Unicode字符,半角字符当半个Unicode字符处理来截短
把字符串按半角字符算半个字符,全角字符算一个字符来截取        
/// </summary>
把字符串按半角字符算半个字符,全角字符算一个字符来截取        
/// <param name="pOriginalNews"></param>
把字符串按半角字符算半个字符,全角字符算一个字符来截取        
/// <param name="len"></param>
把字符串按半角字符算半个字符,全角字符算一个字符来截取        
/// <returns></returns>

把字符串按半角字符算半个字符,全角字符算一个字符来截取         public   string  LimitLengthString( object  pOriginalNews,  int  len)
把字符串按半角字符算半个字符,全角字符算一个字符来截取把字符串按半角字符算半个字符,全角字符算一个字符来截取        
... {
把字符串按半角字符算半个字符,全角字符算一个字符来截取            
string originalNews = pOriginalNews.ToString();
把字符串按半角字符算半个字符,全角字符算一个字符来截取    
把字符串按半角字符算半个字符,全角字符算一个字符来截取            Regex regx 
= new Regex(@"[^一-龥“”<>():?!—《》]");//非汉字和一些常用全角符号
把字符串按半角字符算半个字符,全角字符算一个字符来截取
            char[] newsChars = originalNews.ToCharArray();
把字符串按半角字符算半个字符,全角字符算一个字符来截取            Stack totalSubChars 
= new Stack();//要截短的字符
把字符串按半角字符算半个字符,全角字符算一个字符来截取

把字符串按半角字符算半个字符,全角字符算一个字符来截取            
int narrowChars = 0;//英文和半角符号相当于一个半角字符
把字符串按半角字符算半个字符,全角字符算一个字符来截取
            int widthChars = 0;//两个半角相当于一个全角
把字符串按半角字符算半个字符,全角字符算一个字符来截取
            foreach(char c in newsChars)
把字符串按半角字符算半个字符,全角字符算一个字符来截取把字符串按半角字符算半个字符,全角字符算一个字符来截取            
...{
把字符串按半角字符算半个字符,全角字符算一个字符来截取                
if(widthChars == len)
把字符串按半角字符算半个字符,全角字符算一个字符来截取                    
break;
把字符串按半角字符算半个字符,全角字符算一个字符来截取                totalSubChars.Push(c);
把字符串按半角字符算半个字符,全角字符算一个字符来截取                
if(regx.IsMatch(c.ToString()))
把字符串按半角字符算半个字符,全角字符算一个字符来截取把字符串按半角字符算半个字符,全角字符算一个字符来截取                
...{
把字符串按半角字符算半个字符,全角字符算一个字符来截取                    narrowChars 
++;
把字符串按半角字符算半个字符,全角字符算一个字符来截取                    
if(narrowChars == 2)
把字符串按半角字符算半个字符,全角字符算一个字符来截取把字符串按半角字符算半个字符,全角字符算一个字符来截取                    
...{
把字符串按半角字符算半个字符,全角字符算一个字符来截取                        narrowChars 
= 0;
把字符串按半角字符算半个字符,全角字符算一个字符来截取                        widthChars
++;//找到两个半角的字符
把字符串按半角字符算半个字符,全角字符算一个字符来截取
                    }

把字符串按半角字符算半个字符,全角字符算一个字符来截取                }

把字符串按半角字符算半个字符,全角字符算一个字符来截取                
else
把字符串按半角字符算半个字符,全角字符算一个字符来截取                    widthChars
++;//找到全角的字符
把字符串按半角字符算半个字符,全角字符算一个字符来截取
            }

把字符串按半角字符算半个字符,全角字符算一个字符来截取            
return originalNews.Substring(0, totalSubChars.Count);
把字符串按半角字符算半个字符,全角字符算一个字符来截取        }

 第二种是将字符串转为unicode的byte数组.然后判断其第二个byte是否为0,如果为0则在ascii码

 

把字符串按半角字符算半个字符,全角字符算一个字符来截取
把字符串按半角字符算半个字符,全角字符算一个字符来截取把字符串按半角字符算半个字符,全角字符算一个字符来截取        
/**/ /// <summary>
把字符串按半角字符算半个字符,全角字符算一个字符来截取        
/// 将标题按全角字符当一个Unicode字符,半角字符当半个Unicode字符处理来截短
把字符串按半角字符算半个字符,全角字符算一个字符来截取        
/// </summary>
把字符串按半角字符算半个字符,全角字符算一个字符来截取        
/// <param name="pOriginalNews"></param>
把字符串按半角字符算半个字符,全角字符算一个字符来截取        
/// <param name="len"></param>
把字符串按半角字符算半个字符,全角字符算一个字符来截取        
/// <returns></returns>

把字符串按半角字符算半个字符,全角字符算一个字符来截取         public   string  LimitLengthString( object  pOriginalNews,  int  len)
把字符串按半角字符算半个字符,全角字符算一个字符来截取把字符串按半角字符算半个字符,全角字符算一个字符来截取        
... {
把字符串按半角字符算半个字符,全角字符算一个字符来截取            
string originalNews = pOriginalNews.ToString().Trim();
把字符串按半角字符算半个字符,全角字符算一个字符来截取            UnicodeEncoding encoding 
= new UnicodeEncoding();
把字符串按半角字符算半个字符,全角字符算一个字符来截取            
byte[] newsBytes = encoding.GetBytes(originalNews);
把字符串按半角字符算半个字符,全角字符算一个字符来截取
把字符串按半角字符算半个字符,全角字符算一个字符来截取            StringBuilder sb 
= new StringBuilder();//最终要截出来的字符
把字符串按半角字符算半个字符,全角字符算一个字符来截取

把字符串按半角字符算半个字符,全角字符算一个字符来截取            
int narrowChars = 0;//英文和半角符号相当于一个半角字符
把字符串按半角字符算半个字符,全角字符算一个字符来截取
            int widthChars = 0;//两个半角相当于一个全角
把字符串按半角字符算半个字符,全角字符算一个字符来截取
            for(int i=1; i < newsBytes.Length; i +=2)
把字符串按半角字符算半个字符,全角字符算一个字符来截取把字符串按半角字符算半个字符,全角字符算一个字符来截取            
...{
把字符串按半角字符算半个字符,全角字符算一个字符来截取                
if(widthChars == len)
把字符串按半角字符算半个字符,全角字符算一个字符来截取                    
break;
把字符串按半角字符算半个字符,全角字符算一个字符来截取把字符串按半角字符算半个字符,全角字符算一个字符来截取                
byte[] temp = new byte[]...{newsBytes[i-1], newsBytes[i]};
把字符串按半角字符算半个字符,全角字符算一个字符来截取                sb.Append(Encoding.Unicode.GetString(temp));
把字符串按半角字符算半个字符,全角字符算一个字符来截取                
//检查位置为偶数的字符是否为0,若为0,则为窄字符
把字符串按半角字符算半个字符,全角字符算一个字符来截取
                if((int)newsBytes[i] == 0)
把字符串按半角字符算半个字符,全角字符算一个字符来截取把字符串按半角字符算半个字符,全角字符算一个字符来截取                
...{
把字符串按半角字符算半个字符,全角字符算一个字符来截取                    narrowChars 
++;
把字符串按半角字符算半个字符,全角字符算一个字符来截取                    
if(narrowChars == 2)
把字符串按半角字符算半个字符,全角字符算一个字符来截取把字符串按半角字符算半个字符,全角字符算一个字符来截取                    
...{
把字符串按半角字符算半个字符,全角字符算一个字符来截取                        narrowChars 
= 0;
把字符串按半角字符算半个字符,全角字符算一个字符来截取                        widthChars
++;
把字符串按半角字符算半个字符,全角字符算一个字符来截取                    }

把字符串按半角字符算半个字符,全角字符算一个字符来截取                }

把字符串按半角字符算半个字符,全角字符算一个字符来截取                
else
把字符串按半角字符算半个字符,全角字符算一个字符来截取把字符串按半角字符算半个字符,全角字符算一个字符来截取                
...{
把字符串按半角字符算半个字符,全角字符算一个字符来截取                    widthChars
++;
把字符串按半角字符算半个字符,全角字符算一个字符来截取                }

把字符串按半角字符算半个字符,全角字符算一个字符来截取            }

把字符串按半角字符算半个字符,全角字符算一个字符来截取            
return sb.ToString();
把字符串按半角字符算半个字符,全角字符算一个字符来截取        }