有一个字符串,按每5个byte就添加1个|进去。如果遇到已经有|了,那么就从|后面再开始计算5个byte再插|进去。
例如
123456|7890abcdefg调整后就是
12345|6|7890a|bcdef|g我陷入了纠结中……寻求好心人帮助^^

解决方案 »

  1.   


                string str = "123456|7890abcdefg";
                string[] temp = str.Split('|');
                for (int i = 0; i < temp.Length; i++)
                {
                    if (temp[i].Length > 5)
                    {
                        int count = temp[i].Length / 5;
                        for (int j = 0; j < count; j++)
                            temp[i] = temp[i].Insert((j + 1) * 5 + j, "|");
                    }
                }
                string result = string.Join("|", temp);
                Console.WriteLine(result);
      

  2.   

                string str = "123456|7890abcdefg";
                string result = Regex.Replace(str, @"(((?!\|).){5})", "$1|");
                Response.Write(result);
    //结果:12345|6|7890a|bcdef|g 
      

  3.   

    提供另外的解决办法:Regex re = new Regex("([0-9a-z]{5})", RegexOptions.None);
    string result = re.Replace("123456|7890abcdefg", "$1|");
      

  4.   

                string str = "3只鸡1个西瓜2个大苹|果";
                string result = Regex.Replace(str, @"(((?!\|).){3})", "$1|");
                Response.Write(result);
      

  5.   

    能否讲解下这段代码的含义吗?
    string result = Regex.Replace(str, @"(((?!\|).){3})", "$1|");
      

  6.   

    (((?!\|).){3}) 不是|的任意连续三位数
    $1为第一个捕获到的组
    也就是把str按那个正则替换为$1|
      

  7.   

    我又遇到了新的问题……楼上大家给出的方案都是以每5个字符来插入的,比如“这里有很多好心人”,改变后是“这里有很多|好心人”。
    也怪我没说清楚,我的原意是想按每5个byte插入一个|,如果第5位正好是汉字,那么就换成在第6位插入|,比如:“这里有很多好心人”,改变后是“这里有|很多好|心人”
      

  8.   

    GB2312里汉字是等长的byte,但UTF8里是不等长的。string str = "这里有很多好心人!";
    string newstr = "";
    int splitCount = 0;
    foreach (var c in str)
    {
        newstr += c.ToString();
        byte[] data = System.Text.Encoding.
            GetEncoding("GB2312").GetBytes(c.ToString());
        splitCount += data.Length;
        if (splitCount >= 5)
        {
            newstr += "|";
            splitCount = 0;
        }
    }
    Console.WriteLine(newstr);
    // 这里1|有很多|好心人|!