【Unity/C#】限制字符串显示长度,比如限制玩家角色名字显示长度

例如:UI显示规则:英文字符长度==1,中文字符长度==2,限制字符串显示长度不超过10,超出部分用"···"代替

playerNameText.text = StringUtility.AbbrevStringWithinLength("玩家de名字可能会很长的~",10,"···");
//结果:"玩家de名字···"
    /// <summary>
    /// 化简字符串长度
    /// </summary>
    /// <param name="targetStr"></param>
    /// <param name="targetLength">目标长度,英文字符==1,中文字符==2</param>
    /// <returns></returns>
    public static string AbbrevStringWithinLength(string targetStr,int targetLength,string abbrevPostfix)
    {
        //C#实际统计:一个中文字符长度==1,英文字符长度==1
        //UI显示要求:一个中文字符长度==2,英文字符长度==1

        //校验参数
        if(string.IsNullOrEmpty(targetStr) || targetLength <= 0)
            return targetStr;
        //字符串长度 * 2 <= 目标长度,即使是全中文也在长度范围内
        if(targetStr.Length * 2 <= targetLength)
            return targetStr;
        //遍历字符
        char[] chars = targetStr.ToCharArray();
        int curLen = 0;
        for(int i = 0; i < chars.Length; i++)
        {
            //累加字符串长度
            if(chars[i] >= 0x4e00 && chars[i] <= 0x9fbb)
                curLen += 2;
            else
                curLen += 1;

            //如果当前位置累计长度超过目标长度,取0~i-1,即Substring(0,i)
            if(curLen > targetLength)
                return targetStr.Substring(0,i) + abbrevPostfix;
        }
        return targetStr;
    }

猜你喜欢

转载自blog.csdn.net/qq_39108767/article/details/120957232