string x = "1dd哈哈哈哈23哈哈哈哈";
MessageBox.Show(x.Substring(0,10));可以啊..

解决方案 »

  1.   

    //试试我的笨方法:string s = "122哈哈哈哈11哈哈哈哈哈哈哈";
    //+5 是四舍五入
    string[] _s = new string[(System.Text.Encoding.Default.GetByteCount(s)+5)/10];
    int j = 0; int k = 0;
    for (int i=0; i<s.Length; i++) {
    if (System.Text.Encoding.Default.GetByteCount(new char[]{s[i]}) > 1) {
    j += 2;
    } else {
    j ++;
    } if (j >10) {k++; j -= 10;} _s[k] += s[i];
    }
      

  2.   

    刚才在看电影突然想到这个程序有问题:string[] _s = new string[(System.Text.Encoding.Default.GetByteCount(s)+5)/10];可以考虑改成(因为有可能是21-24 bytes)string[] _s = new string[(System.Text.Encoding.Default.GetByteCount(s)-1)/10+1];或者最保险的(因为你要求9 有可能当10 用,多个的话就可能超出索引)string[] _s = new string[System.Text.Encoding.Default.GetByteCount(s)/9+1];这个环节建议自己再根据情况增加一个方法来检测,比如在上面的:if (j >10) {k++; j -= 10;}加一个if (k>_s.Length) { 重新生成一个新的string[] 然后用array.copy 过去
      

  3.   

    // try this:string s = "122哈哈哈哈11哈哈哈哈哈哈哈";string[] _s = new string[System.Text.Encoding.Default.GetByteCount(s)/9+1];
    int j = 0; int k = 0;
    for (int i=0; i<s.Length; i++) {
    if (System.Text.Encoding.Default.GetByteCount(new char[]{s[i]}) > 1) {
    j += 2;
    }
    else {
    j ++;
    } if (j >10) {k++; j -= 10;} _s[k] += s[i];
    }string[] s_ = new string[k];
    Array.Copy(_s,0,s_,0,k);// s_ 就是你要的结果
      

  4.   

    //晕,上面的程序没有调试,k要++ 才行,这个是通过的string s = "122哈哈哈哈11哈哈哈哈哈哈哈";string[] _s = new string[System.Text.Encoding.Default.GetByteCount(s)/9+1];
    int j = 0; int k = 0;
    for (int i=0; i<s.Length; i++) {
    if (System.Text.Encoding.Default.GetByteCount(new char[]{s[i]}) > 1) {
    j += 2;
    }
    else {
    j ++;
    } if (j >10) {k++; j -= 10;} _s[k] += s[i];
    }string[] s_ = new string[++k];
    Array.Copy(_s,0,s_,0,k);// s_ 就是你要的结果
      

  5.   

    扫描第N次子字符串,判断ASCLL小于160的字节的奇偶性,如果为奇数,把该子串最后一字节放入余下的串中,如此循环即可。
      

  6.   

    有必要这么复杂吗?而且如果系统默认的编码不支持中文呢?如果从速度考虑,这不免太发时间了吗?我倒觉得,可以从另一种角度考虑,如果字符范围是0-255,宽度是1,否则,宽度是2。
    static String[] Split(String str, int wid) {
      ArrayList list = new ArrayList((str.Length + 4) / 5);
      int cc = 0, start = 0;
      for (int i = 0; i < str.Length; i++) {
        cc += (str[i] <= 255 ? 1 : 2);
        if (cc >= wid) {
      if (cc > wid) {
      i--;
      }
          list.Add(str.Substring(start, i - start + 1));
          start = i + 1;
          cc = 0;
        }
      }
      if (cc > 0) {
      list.Add(str.Substring(start));
      }
      return (String[]) list.ToArray(typeof(String));
    }
    例子:
    String[] str = Split("122哈哈哈哈11哈哈哈哈哈哈哈", 10);
    for (int i = 0; i < str.Length; i++)
       Console.WriteLine(str[i]);