按字节截取字符串

string test = "这是一个test";
int length1 = test.Length; //字符数
Console.WriteLine(length1);  //8
test = test.Substring(0, 6);   //按字符数截取的
Console.WriteLine(test);      //这是一个te
int length2=System.Text.Encoding.Default.GetBytes("这是一个test").Length;  //字节长度
Console.WriteLine(length2);  //12(一个汉字占2个字节)

 

 /// <summary>
        /// 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节数
        /// 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,
        /// 输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”,
        /// 如果指定的字节数超过了字符串的字节数则加上"."符号
        /// </summary>
        /// <param name="str">输入的字符串</param>
        /// <param name="length">截取的长度</param>
        /// <returns>按指定"字节数"截取后的字符串</returns>
        public static string GetSubString(string str,int length)
        {
            string strResult = string.Empty;
            if (str == null || str == "" || length == 0)
            {
                return strResult;
            }
            //字符串的字节长度
            int lengthByte = System.Text.Encoding.Default.GetBytes(str).Length;
            //如果指定的字节数小于等于字符串的字节数
            if (lengthByte >= length)
            {
                for (int i = 1; i <= str.Length; i++)
                {
                    string temp = string.Empty;
                    //截取字符串
                    temp = str.Substring(0, i);
                    //字符串截取后的字节长度
                    int length2 = System.Text.Encoding.Default.GetBytes(temp).Length;
                    if (length2 > length)
                    {
                        strResult = str.Substring(0, i - 1);
                        break;
                    }
                    if (length2 == length)
                    {
                        strResult = temp;
                        break;
                    }
                }
            }
            else//如果指定的字节数大于字符串的字节数,则在字符串的末尾加上"."
            {
                StringBuilder sb=new StringBuilder();
                for (int j = 0; j < length - lengthByte; j++)
                {
                  sb.Append(".");
                }
                strResult = str + sb.ToString();
            }
            //返回结果
            return strResult;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值