c# 截取字符串,多于这个长度自动换行

 

   public bool IsChinese(char chr)
        {
            bool isChinese = false;
            //if ((int)str[i] > 127)//判断是否是汉字
            if ((int)chr > 0x4E00 && (int)chr < 0x9FA5)
            {
                isChinese = true;
            }
            else
            {
                isChinese = false; ;
            }
            return isChinese;
        }

  /// <summary>
        /// 截取字符串,不限制字符串长度
        /// </summary>
        /// <param name="str">待截取的字符串</param>
        /// <param name="len">每行的长度,多于这个长度自动换行</param>
        /// <returns></returns>
        public string CutStr(string str, int len)
        {
            //设备完善的灌溉机井2条,泵站1条,排水沟\r\n1条,灌溉机井1个,排水沟1个,出水孔1个,\r\n闸1个
            //正常情况下,我们是直接去string的length的,但是汉字是有两个字节的
            StringBuilder sb = new StringBuilder();
            int count = 0;//统计个数
            for (int i = 0; i < str.Length; i++)
            {
                char chr = str[i];
                if (IsChinese(chr))
                {
                    count += 2;
                }
                else
                {
                    count += 1;
                }
                if (count == len)
                {
                    sb.Append(chr + "\r\n");
                    count = 0;
                }
                else if (count > len)
                {
                    sb.Append("\r\n" + chr);
                    if (IsChinese(chr))
                    {
                        count = 2;
                    }
                    else
                    {
                        count = 1;
                    }
                }
                else
                {
                    sb.Append(chr);
                }
            }
            return sb.ToString();
        }

      /// <summary>
        /// 截取字符串,不限制字符串长度
        /// </summary>
        /// <param name="str">待截取的字符串</param>
        /// <param name="len">每行的长度,多于这个长度自动换行</param>
        /// <returns></returns>
        public string CutStr2(string str, int len)
        {
            //汉字和数字都当做一个个字节
            string result = string.Empty;
            int strLenth = System.Text.Encoding.Default.GetByteCount(str);
            for (int i = 0; i < strLenth; i++)
            {
                int r = i % len;
                int last = (str.Length / len) * len;
                if (i != 0 && i <= last)
                {
                    if (r == 0) //换行
                    {
                        result += str.Substring(i - len, len) + "\r\n";
                    }
                }
                else if (i > last)
                {
                    result += str.Substring(i - 1);
                    break;
                }
            }
            return result;
        }

 

posted @ 2018-07-06 10:18  ParanoiaApe  阅读(1307)  评论(0)    收藏  举报