C# 截取string字符串长度3种方法

/// <summary>
        /// 截取指定长度的字符串
        /// </summary>
        /// <param name="str">要截取的字符串</param>
        /// <param name="len">要截取的长度</param>
        /// <param name="flag">截取后是否加省略号(true加,false不加)</param>
        /// <returns></returns>
        public static string CutString(string str, int len, bool flag)
        {
            string _outString = "";
            int _len = 0;
            for (int i = 0; i < str.Length; i++)
            {
                if (Char.ConvertToUtf32(str, i) >= Convert.ToInt32("4e00", 16) && Char.ConvertToUtf32(str, i) <= Convert.ToInt32("9fff", 16))
                {
                    _len += 2;
                    if (_len > len)//截取的长度若是最后一个占两个字节,则不截取
                    {
                        break;
                    }
                }
                else
                {
                    _len++;
                }

                try
                {
                    _outString += str.Substring(i, 1);
                }
                catch
                {
                    break;
                }
                if (_len >= len)
                {
                    break;
                }
            }
            if (str != _outString && flag == true)//判断是否添加省略号
            {
                _outString += "...";
            }
            return _outString;
        }
/// <summary>
        /// 截取指定长度的字符串
        /// </summary>
        /// <param name="str">要截取的字符串</param>
        /// <param name="len">要截取的长度</param>
        /// <param name="flag">截取后是否加省略号(true加,false不加)</param>
        /// <returns></returns>
        public static string CutString(string str, int len, bool flag)
        {
            System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();
            byte[] bts = ascii.GetBytes(str);
            int _len = 0;
            string _outString = "";
            for (int i = 0; i < bts.Length; i++)
            {
                if ((int)bts[i] == 63)//两个字符
                {
                    len += 2;
                    if (_len > len)//截取的长度若是最后一个占两个字节,则不截取
                    {
                        break;
                    }
                }
                else
                {
                    len += 1;
                }

                try
                {
                    _outString += str.Substring(i, 1);
                }
                catch
                {
                    break;
                }

                if (_len >= len)
                {
                    break;
                }
            }
            if (str != _outString && flag == true)//判断是否添加省略号
            {
                _outString += "...";
            }
            return _outString;
        }
/// <summary>
        /// 截取指定长度的字符串
        /// </summary>
        /// <param name="str">要截取的字符串</param>
        /// <param name="len">要截取的长度</param>
        /// <param name="flag">截取后是否加省略号(true加,false不加)</param>
        /// <returns></returns>
        public static string CutString(string str, int len, bool flag)
        {
            if (str == null || str.Length == 0 || len <= 0)
            {
                return string.Empty;
            }

            int l = str.Length;

            #region 计算长度
            int clen = 0;
            while (clen < len && clen < l)
            {
                //每遇到一个中文,则将目标长度减一。
                if ((int)str[clen] > 128)
                {
                    len--;
                }
                clen++;
            }
            #endregion

            if (clen < l)
            {
                return flag ? str.Substring(0, clen) + "..." : str.Substring(0, clen);
            }
            else
            {
                return str;
            }
        }
时间: 2024-10-05 04:58:12

C# 截取string字符串长度3种方法的相关文章

C#中判断空字符串的3种方法性能分析

3种方法分别是:string a="";1.if(a=="")2.if(a==String.Empty)3.if(a.Length==0) 3种方法都是等效的,那么究竟那一种方法性能最高呢?本人用实验说明问题. 建立3个aspx页面(为什么用网页,主要是利用Microsoft Application Center Test ) WebForm1.aspxprivate void Page_Load(object sender, System.EventArgs e)

VS中C#读取app.config数据库配置字符串的三种方法(转)

VS中C#读取app.config数据库配置字符串的三种方法(转) http://hi.baidu.com/mindox/item/3278dc352c7ba68fb80c0389 http://www.blogjava.net/keweibo/articles/391207.html 关于VS2008或VS2005中数据库配置字符串的三种取法 VS2008建立Form程序时,如果添加数据源会在配置文件 app.config中自动写入连接字符串,这个字符串将会在你利用DataSet,SqlDat

Java List转换为字符串的几种方法

import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.List; // 参考:https://blog.csdn.net/vasilis_1/article/details/75499087 public class ListToStringTest { public static String listToString1(List list, char separato

C 中判断空字符串的3种方法性能分析【月儿原创】

C#中判断空字符串的3种方法性能分析 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.4.28  3种方法分别是:string a="";1.if(a=="")2.if(a==String.Empty)3.if(a.Length==0) 3种方法都是等效的,那么究竟那一种方法性能最高呢?本人用实验说明问题. 建立3个aspx页面(为什么用网页,主要是利用Microsoft Application

abap中查找某字符串的两种方法

abap中查找某字符串的两种方法: 一.RPR_ABAP_SOURCE_SCAN 可以用于搜索SAP中的程序代码,一般使用时填写开发类.程序名及需要查找的字符串即可,选择屏幕布局和功能很简单,熟悉ABAP代码的人一看就明白了,不多解释了,使用方法及截图如下.选择范围太大的话很慢,可以考虑放到后台运行,结束了再看结果. 用这个程序查看某些特征的代码很有效,比如查找所有程序中这样的代码等. 1 SE38回车 2 程序名:RPR_ABAP_SOURCE_SCAN 3 F8 Execute 二.当然也可

Python拼接字符串的7种方法总结

前言 忘了在哪看到一位编程大牛调侃,他说程序员每天就做两件事,其中之一就是处理字符串.相信不少同学会有同感. 在Python中,我们经常会遇到字符串的拼接问题,几乎任何一种编程语言,都把字符串列为最基础和不可或缺的数据类型.而拼接字符串是必备的一种技能.今天,我跟大家一起来学习Python拼接字符串的七种方式. 下面话不多说了,来一起看看详细的介绍吧 1.来自C语言的%方式 print('%s %s' % ('Hello', 'world')) >>> Hello world %号格式化

java对象转换String类型的三种方法

在很多情况下我们都需要将一个对象转换为String类型.一般来说有三种方法可以实现:Object.toString().(String)Object.String.valueOf(Object).下面对这三种方法一一分析 一.采用Object.toString()toString方法是java.lang.Object对象的一个public方法.在java中任何对象都会继承Object对象,所以一般来说任何对象都可以调用toString这个方法.这是采用该种方法时,常派生类会覆盖Object里的t

使用javaScript在句子中找出最长的单词,并返回它的长度(三种方法)

1. 使用 sort排序方法(我能想起来的最笨的一种) function findLongestWord(str) { var strArr = str.split(" "); //将字符串长度,另存一个数组 var lenArr = strArr.map(function(item){ return item.length; }); var lastArr = lenArr.sort(function(a,b){ return b-a; }); var num = lastArr[0

输入带空格字符串的两种方法

这是我们平常用的: char s[100]; scanf("%s",s);//cin>>s; 输入字符串时,当遇到空格就自动停止输入,导致空格后门的字符没有按我们设想的输入. 现在有两种方法可以输入带空格的字符串: 第一,用get()函数: char str[100]; get(str); 注:get()函数在linux使用会有这条错误.在linux(fedora10)下的话建议使用第二种方法. test.o: In function `main': test.c:(.te