首页蓝耳朵|小小蓝耳朵广州图书馆外文室英语儿童读物资源介绍网佛教青年之友旧版收集永硕E盘Phonics Short Vowels Game 
不拆散双字节的字符,按间隔要求在包含中英字符的字符串中插入子字符串
所属栏目:ASP.NET(webform)  时间:2013-07-12 22:37  作者:狼子
没什么好写的,觉得这个不是最好的方法,不过间隔数不大的时候,这样做也不会太慢,记录一下吧,这样什么时候硬盘坏了,也不会丢了。。。
 
/*
         * 大猫  10:08:37
         * 帮我写个函数,将一个字符串每隔n个字符后加上<br>标识
         * 应该是每隔n个实际长度,但不能拆散双字节的字符
         * 大猫  10:09:49
         * 例如,n=5
         * 那么:在国足消极比赛将严惩转换后应该是:在国<br>足消<br>极比<br>赛将<br>严惩
         */
 
#region 不拆散双字节的字符,按间隔要求插入字符串
    /// <summary>
    /// 不拆散双字节的字符,按间隔要求插入字符串
    /// </summary>
    /// <param name="txt">原始字符串</param>
    /// <param name="space">要插入字符串的间隔数,是字符数</param>
    /// <param name="spaceMark">要插入的字符串</param>
    /// <returns></returns>
    private string InsertMark(string txt, int space, string spaceMark)
    {
        int maxLen = System.Text.Encoding.Default.GetByteCount(txt);
        int markLen = spaceMark.Length;
        int beginIndex = 0;
 
        for (int nowIndex = space; nowIndex < maxLen; nowIndex = beginIndex + space)
        {
            int nowLen = txt.Length;    //取当前的字符串长度
 
            if (nowIndex > nowLen) nowIndex = nowLen;   //修正现在要截取的字符串的最后索引位,剩下的字符串不足space个字符时,取到字符串最后
            
            string tempTxt = txt.Substring(beginIndex, nowIndex - beginIndex);  //取临时字符串,用于在下面循环判断是否符合字符数要求
            if (nowLen == beginIndex && nowLen == nowIndex) break;              //无字符串可截取了,退出循环
 
            //如果截取的临时字符串的字符数大于间隔字符数,往前取一个字符,直到符合间隔字符数的要求
            while (System.Text.Encoding.Default.GetByteCount(tempTxt) > space)
            {
                nowIndex--;
                tempTxt = txt.Substring(beginIndex, nowIndex - beginIndex);
            }
 
            txt = txt.Insert(nowIndex, spaceMark);  //插入间隔字符
 
            beginIndex = nowIndex + markLen;    //后移下次循环时临时字符串的起始位置
            maxLen += markLen;                          //修正当前字符串的总长度,保证继续循环
        }
        return txt;
    }
    #endregion

 

小楼宝宝的涂鸦花花(Imitater)的博客起名称骨测字皖ICP备06000023号-17