利用正则表达式计算含有中文的字符串长度

using System;
using System.Text.RegularExpressions;

namespace LangZi
{
    
/// <summary>
    
/// StringHelper 的摘要说明。
    
/// </summary>

    public class StringHelper
    
{
        
public StringHelper()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


        
#region GetLength
        
/// <summary>
        
/// 返回包含中文字符的字符串长度
        
/// C# 的string.Length中中文字只做1位统计,所以要将其转换为2位
        
/// </summary>
        
/// <param name="strSource">要统计长度的字符串变量</param>
        
/// <returns>字符串长度</returns>

        public static int GetLength(string strSource)
        
{
            Regex regex 
= new Regex("[\u4e00-\u9fa5]+", RegexOptions.Compiled);
            
int nLength = strSource.Length;

            
for(int i=0; i<strSource.Length; i++)
            
{
                
if (regex.IsMatch(strSource.Substring(i,1))) 
                
{
                    nLength
++;
                }

            }


            
return nLength;
        }

        
#endregion

    }

}

使用:

int iLength= LangZi.StringHelper.GetLength(source)


土人用最土的办法,以求实现自己的目标,看了银河兄的C#中的字符编码问题 一文,发现有更好更完善的方法:

using System;
using System.Text;

namespace LangZi
{
    
/// <summary>
    
/// StringHelper 的摘要说明。
    
/// </summary>

    public class StringHelper
    
{
        
public StringHelper()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


        
#region GetLength
        
/// <summary>
        
/// 返回包含中文字符的字符串长度
        
/// C# 的string.Length中中文字只做1位统计,所以要将其转换为2位
        
/// </summary>
        
/// <param name="strSource">要统计长度的字符串变量</param>
        
/// <returns>字符串长度</returns>

        public static int GetLength(string strSource)
        
{
             return Encoding.GetEncoding("GB18030").GetBytes(strSource).Length; 
        }

        
#endregion

    }

posted @ 2005-08-24 18:01  浪子  阅读(5471)  评论(13编辑  收藏  举报