现在的位置: 首页 > 综合 > 正文

在C#中截取指定长度的中文字符串

2013年08月27日 ⁄ 综合 ⁄ 共 1019字 ⁄ 字号 评论关闭

在我写代码的过程中, 碰到要在原字符串中截取指定长度的字符串. 我们通常使用string.Substring(), 但使用这个有一点问题就是中文字符和英文字符都认为点一个长度. 因为这样, 所以有时候我们要取的并不是我们想要的.
在网上找了一下, 没找到.于是自己写了一个.如果有错误的地方请大家指正.谢谢!
private static string SubString(string stringToSub, int length)
{
    Regex regex = new Regex("[/u4e00-/u9fa5]+", RegexOptions.Compiled);
    char[] stringChar = stringToSub.ToCharArray();
    StringBuilder sb = new StringBuilder();
    int nLength = 0;

    for (int i = 0; i < stringChar.Length; i++)
    {
        if (regex.IsMatch((stringChar[i]).ToString()))
        {
            sb.Append(stringChar[i]);
            nLength += 2;
        }
        else
        {
            sb.Append(stringChar[i]);
            nLength = nLength + 1;
        }

        if (nLength > length)
            break;
    }

    return sb.ToString();
}

public static string SubComment(string original, int width)
{
    int len = original.Length;
    if (len < width)
        return original;
    int clen = 0;//当前长度
    int cwidth = 0;//当前宽度
    while (clen < len && cwidth < width)
    {
        if ((int) original[clen] > 128)
            cwidth++;
        clen++;
        cwidth++;
    }
    return original.Substring(0, clen);
}

【上篇】
【下篇】

抱歉!评论已关闭.