C#中文和英文字符串长度问题

来源:互联网 发布:历年淘宝双十一销售额 编辑:程序博客网 时间:2024/05/06 05:21

/// <summary>
/// TrueStrLength 的摘要说明。
/*
在C#中字符串"中国人民zgrm"的Length=8,即一个汉字只占一个长度;
但有时候为了格式化输出的需要,我们期望得到字符串所占的字节长度,即
一个汉字占两个长度,"中国人民zgrm"的长度应该为12(=4个汉字*2+4个英文字符).
以下两个函数就用于解决这个问题.

*/
   /// </summary>
public class TrueStrLength
{
   public TrueStrLength()
   {
    //
    // TODO: 在此处添加构造函数逻辑
    //
   }

   static public int trueLength(string str)
   {
   
    // str 字符串
    // return 字符串的字节长度
    int lenTotal = 0;
    int n = str.Length;
    string strWord = "";
    int asc;
    for(int i=0;i<n;i++)
    {
     strWord = str.Substring(i,1);    
     asc = Convert.ToChar(strWord);
     if ( asc < 0 || asc > 127 )
      lenTotal = lenTotal + 2;
     else
      lenTotal = lenTotal + 1;
    }

    return lenTotal;
   }


   static public string cutTrueLength(string strOriginal,int maxTrueLength,char chrPad,bool blnCutTail)
   {

    // strOriginal 原始字符串
    // maxTrueLength 需要返回的字符串的字节长度
    // chrPad 字符串不够时的填充字符
    // blnCutTail 字符串的字节长度超过maxTrueLength时是否截断多余字符
    // return 返回填充或截断后的字符串
    string strNew = strOriginal;
   
    if (strOriginal==null || maxTrueLength<=0)
    {
     strNew = "";
     return strNew;
    }

    int trueLen = trueLength(strOriginal);
    if (trueLen>maxTrueLength)//超过maxTrueLength
    {
     if (blnCutTail)//截断
     {
      for(int i=strOriginal.Length-1; i>0; i--)
      {
       strNew = strNew.Substring(0,i);
       if (trueLength(strNew) == maxTrueLength) 
        break;
       else if (trueLength(strNew) < maxTrueLength)
       {
        strNew += chrPad.ToString();
        break;
       }
      }
     }
    }
    else//填充
    {
     for(int i=0;i<maxTrueLength-trueLen;i++)
     {
      strNew += chrPad.ToString();
     }
    }

    return strNew;
   }
}

原创粉丝点击