测试了3种获取中英文混合字符串长度的方法

来源:互联网 发布:无锡网络卓越科技 编辑:程序博客网 时间:2024/05/29 20:01
 
http://www.cnblogs.com/cest/archive/2004/12/01/71297.html

分别写了3个函数:
1.GetGBLength()
/// <summary>
/// 菜菜写的
/// </summary>

private static int GetGBLengthC(string strData)
{            
    
int iLen = 0;
    
if( strData!=null || strData!="")
    
{
        
try
        
{
            iLen 
= System.Text.Encoding.Default.GetByteCount(strData);
        }

        
catch{}
    }

    
return iLen;
}
  

2.GetGBLengthA()
/// <summary>
/// 风@((((( 
/// </summary>

private static int GetGBLengthA(string strData) 

    System.Text.Encoding encoder5 
= System.Text.Encoding.GetEncoding("GB2312"); 
    
return encoder5.GetByteCount(strData); 
}


3.GetGBLengthB
/// <summary>
/// 活靶子.Net
/// </summary>

private static int GetGBLengthB(string Str)
{
    
int intResult = 0;
    
foreach (char Char in Str)
    
{
        
if ((int)Char > 127)
            intResult 
+= 2;
        
else
            intResult 
++;
    }

    
return intResult;
}

测试主程序:
static void Main(string[] args)
{
    StopWatch sw 
= new StopWatch();
    
string strData = "01234567890阿发端发;立法局阿;领导法拉第发端夫君阿;地方阿斗发狂三角枫哈萨克毒发啊发狂挥发可回到发阿克苏多幅阿抗倒伏阿括弧发狂复活卡哈喀什发咖啡阿卡罚款罚款发狂撒发狂撒发狂撒多幅阿卡大饭卡大发狂撒毒发阔的饭卡大饭卡大饭卡大饭卡大发狂撒多幅阿克苏大罚款毒发阔的发咔哒复活卡多幅卡多幅卡撒多幅卡撒多幅哈克三点会发阿抗倒伏阿克苏多幅阿卡饭卡大akdfhaksdjfha kdfa ";
    
forint i=0; i<10; i++ )
        strData 
+=strData;
    GC.Collect();

    sw.Reset();
    GetGBLengthA(strData);
    Console.WriteLine(
"GetGBLengthA() Run Time: " + (sw.Peek() / (float)1000).ToString() + " 毫秒");

    sw.Reset();
    GetGBLengthB(strData);
    Console.WriteLine(
"GetGBLengthB() Run Time: " + (sw.Peek() / (float)1000).ToString() + " 毫秒");
    
    sw.Reset();
    GetGBLengthC(strData);
    Console.WriteLine(
"GetGBLengthC() Run Time: " + (sw.Peek() / (float)1000).ToString() + " 毫秒");
}


原创粉丝点击