随笔-Unity对于不同平台的字符串处理(判断长度、截取字符串)

之前因为要在游戏项目中添加IM系统,当需要有字符限制的时候。(在客户端判断长度)

第一时间想要运用NGUI的Input中Character Limit组件,但是发现它判断的字符长度并没有全角半角之分。

后来运用System.Text.Encoding.BigEndianUnicode等方法来判断时发现Unity在不同平台所判断出的字符长度并不相同。

然后想到了运用一下这种方法来判断字符长度

/// <summary>
    /// 判断字符长度
    /// </summary>
    /// <param name="mString"></param>
    /// <returns></returns>
    public int CalculatePlaces(string mString)
    {
        int _placesNum = 0; //统计字节位数
        char[] _charArray = mString.ToCharArray();
        for (int i = 0; i < _charArray.Length; i++)
        {
            char _eachChar = _charArray[i];
            if (_eachChar >= 0x4e00 && _eachChar <= 0x9fa5) //判断中文字符
                _placesNum += 2;
            else if (_eachChar >= 0x0000 && _eachChar <= 0x00ff) //已2个字节判断
                _placesNum += 1;
        }
        return _placesNum;
    }

 同理能判断字符长度之后就可以相应的截取固定长度的字符

/// <summary>
    /// 截取字符
    /// </summary>
    /// <param name="_mString">字符</param>
    /// <param name="_mLenght">长度</param>
    /// <returns>定长度的字符</returns>
    public string InterceptPlaces(string _mString,int _mLenght)
    {
        int _placesNum = 0;
        char[] _charArray = _mString.ToCharArray();
        string _charReturn = string.Empty;
        for (int i = 0; i < _charArray.Length; i++)
        {
            if (_placesNum < _mLenght)
            {
                char _eachChar = _charArray[i];
                if (_eachChar >= 0x4e00 && _eachChar <= 0x9fa5) //判断中文字符
                    _placesNum += 2;
                else if (_eachChar >= 0x0000 && _eachChar <= 0x00ff) //已2个字节判断
                    _placesNum += 1;
                _charReturn += _eachChar.ToString();
            }
            else if (_placesNum >= _mLenght)
            {
                break;
            }
        }
        return _charReturn.ToString();
    }

猜你喜欢

转载自my.oschina.net/u/3184885/blog/1649655