刚才提问提得不对,现在再次提:string s1 = "中国人民";
string s2 = "abcd";1)怎么样才能使 s1.Length = 8
2)怎么样才能使 s1.substring(0, 4) = "中国"谢谢

解决方案 »

  1.   

    1.protected int GetLength(string s)
    {
    System.Text.RegularExpressions.Regex regx=new Regex ("[\u4E00-\u9FA5]",System.Text.RegularExpressions .RegexOptions.IgnoreCase);
    return (regx.Matches(s).Count+s.Length);
    }
      

  2.   

    2.protected string GetSubString(string s,int length)
    {
    if(length>s.Length)length=s.Length;
    System.Text.RegularExpressions.Regex regx=new Regex ("[\u4E00-\u9FA5]",System.Text.RegularExpressions .RegexOptions.IgnoreCase);
    for(int i=0;i<length;i++)
    {
    if(regx.IsMatch(s.Substring(i,1)))
    {
    length-=1;
    }
    } return s.Substring(0,length);
    }
      

  3.   

    protected string GetLength(string s)
    {
        return System.Text.Encoding.Default.GetByteCount(s);
    }
      

  4.   

    /// <summary>
    /// 获得字符串长度(包括中文字符)
    /// </summary>
    /// <param name="str">原字符串</param>
    /// <returns></returns>
    public static int GetLength(string str)
    {
    byte[] strAry = System.Text.Encoding.Default.GetBytes(str);
    return strAry.Length;
    } /// <summary>
    /// 截取字符串(适用于中英文混合)
    /// </summary>
    /// <param name="str">原字符串</param>
    /// <param name="len">长度</param>
    /// <returns></returns>
    public static string CutString(string str,int len)
    {
    str = str.Trim();
    byte[] myByte = System.Text.Encoding.Default.GetBytes(str);   
    if(myByte.Length>len)
    {
    string result = "";
    for(int i=0;i<str.Length;i++)
    {
    byte[] tempByte=System.Text.Encoding.Default.GetBytes(result);
    if(tempByte.Length<len)
    {
    result += str.Substring(i,1);
    }
    else
    {
    break;
    }     
    }
    return result+"...";
    }
    else
    {
    return str;
    }
    }
      

  5.   

    用Regex 感觉大材小用。谢谢Snowdust(雪尘) 解决了第1个问题,
    第2个问题怎么办?