日期:2014-05-17  浏览次数:21639 次

C# 如何给字符串换行并 对齐中英文
给一个比较长的中英混合的字符串 要显示在页面上 需要加入"\n"换行  如何处理处换行并 对齐中英文。效果如下:

啊山东tgggsd
的说法的说法
df
目前这样:
啊山东tggg
sd的说法的说
法df

我目前思路是用Encoding.Unicode.GetBytes()方法获取数组 然后遍历判断中英文在做处理  感觉没效率也麻烦  求指导

------解决方案--------------------
你举的例子没看懂,何为对齐?请通俗点,原文是什么样的,整理后是什么样的。
------解决方案--------------------
先替换所有的回车为空,然后循环字符,判断字符是否字母,如果是字母进行处理,如果不是,再进行处理!自己想吧,我要下班了,不想写!字符串不是很大的情况,循环变量就好!
------解决方案--------------------
你根据字符转码将中文1个汉字当做2个字符出来,英文当1个字符出来,算总数据长度,然后按照你的固定长度去判断你每行应该放几个中文字或者几个英文字符或者几个中英字符组合,如你自己举例中:
abcdefghij            //长度为10
史蒂夫合适的话的说法      //长度为10

10+20=30,然后每行放15(如果中间是中文则+-1)个长度值,则变为

abcdefghij史蒂
夫合适的话的说法
------解决方案--------------------
引用:

//
//len:字长度
static string NewLineStr(string oldStr, int len)
{
    StringBuilder strb = new StringBuilder();
    for (int i = 0, counter = 0; i < oldStr.Length; i++)
    {
        strb.Append(oldStr[i]);
        int charcode = (int)(oldStr[i]);
        counter += (charcode > 0x4E00 && charcode < 0x9FA5) ? 2 : 1;
        if (counter % (len << 1) == 0)
        {
            strb.Append(Environment.NewLine);
        }
    }
    return strb.ToString();
}

判断那里有bug,换成

if (counter >= len * 2)
{
    strb.Append(Environment.NewLine);
    counter = 0;
}