C# 字符串操作详解

MSDN关于String的所有Method

1、字符串转字符数组

(1)、ToCharArray()方法,源码如下:

调用代码:

var str = "Hello World";
//将字符串转换成字符数组
var result = str.ToCharArray();
var enumerator = result.GetEnumerator();
while (enumerator.MoveNext())
{
     Console.WriteLine(enumerator.Current);
}

输出结果:

 

(2)、源码如下:

调用代码如下:

            var str = "Hello World";
            //将字符串转换成字符数组
            var result = str.ToCharArray(2,2);
            var enumerator = result.GetEnumerator();
            while (enumerator.MoveNext())
            {
                Console.WriteLine(enumerator.Current);
            }

输出结果:

 

(3)、源码如下:

作用:清空字符串前后的空格

调用代码如下:

            var str = "          Hello World              "; 
            //调用trim方法去除前后的空格
            var result = str.Trim();
            Console.WriteLine("str的原长度:{0},str调用Trim()方法之后的长度{1},结果字符串:{2}",str.Length,result.Length, "$"+ result + "$");

 

 

(4)、源码如下:

调用代码如下:

            var str = "          Hello World              ";
            //str调用trim方法的代码执行过程
            //1、str处理开头的字母部分,str开头的首字母是空格,然后检索传入的参数是否有空格,有就清除开头所有的空格,并执行下一个字母的判断
            //下一个字母如果传入的参数当中有则清除字符串中的改该字母(连续则清除所有连续的),没有就不在对字符串的开头进行操作
            //注:整个过程以字符串为主,如果调用trim方法的字符串中的字符,在传入参数中没有,那么整个过程中段.
            //2、str处理末尾的字母部分,str末尾的字母是空格,然后检索传入的参数是否有空格,有就清除末尾所有的空格,并执行下一个字母的判断,没有就不在对字符串的末尾进行操作
            //下一个字母如果传入的参数当中有则清除字符串中的改该字母(连续则清除所有连续的),没有就不在对字符串的开头进行操作
            //注:整个过程以字符串为主,如果调用trim方法的字符串中的字符,在传入参数中没有,那么整个过程中段.
            var result = str.Trim(' ', 'd', 'H', 'r', 'e');
            Console.WriteLine("str的原长度:{0},str调用Trim()方法之后的长度{1},结果字符串:{2}", str.Length, result.Length, "$" + result + "$");
            Console.ReadKey();

 

(5)、源码如下:

            var str = "                      Hello World                        ";
            //1、str处理末尾的字母部分,str末尾的字母是空格,然后检索传入的参数是否有空格,有就清除末尾所有的空格,并执行下一个字母的判断,没有就不在对字符串的末尾进行操作
            //下一个字母如果传入的参数当中有则清除字符串中的改该字母(连续则清除所有连续的),没有就不在对字符串的开头进行操作
            

       //输出:"$ Hello Worl$" var result = str.TrimEnd(' ', 'o', 'd', 'r', 'o'); //1、str处理末尾的字母部分,str末尾的字母是空格,然后检索传入的参数是否有空格,有就清除末尾所有的空格,并执行下一个字母的判断,没有就不在对字符串的末尾进行操作 //下一个字母如果传入的参数当中有则清除字符串中的改该字母(连续则清除所有连续的),没有就不在对字符串的开头进行操作 //输出:"$ Hello W$" var result2 = str.TrimEnd(' ', 'd', 'l', 'r', 'o'); Console.WriteLine("$" + result + "$"); Console.WriteLine("$" + result2 + "$");

 

(6)、源码如下:

(5)的反例,处理字符串的开头.

 

(7)、源码如下:

参数:value-目标字符串   comparisonType-比较类型

作用:判断传入的字符串是不是当前字符串的开头,可设置比较类型(二进制比较、忽略语言文化比较、按当前线程的语言文化比较)

调用代码如下:

var str = "Hello World";
//判断str字符串是不是以"Hello"字符串开头,"Hello"字符串和"Hello World"字符串的比较方式位二进制比较,
//是速度最快的一种,但前提是字符串不能是展示给用户看的信息
//输出:True
var result = str.StartsWith("Hello",StringComparison.Ordinal);
//判断str字符串是不是以"Hello"字符串开头,"Hello"字符串和"Hello World"字符串的比较方式为采用当前线程设置的语言文化,并忽略大小写的比较方式
var result1 = str.StartsWith("Hello", StringComparison.CurrentCultureIgnoreCase);
Console.WriteLine(result+"...."+ result1);//输出:True....True

 

(8)、源码如下:

参数:value-目标字符串   ignorecase-是否忽略大小写 culture-语言文化

            var str = "Hello World";
            //判断str字符串是不是以"Hello"字符串开头,"Hello"字符串和"Hello World"字符串的比较方式为当前线程的语言文化为背景的情况下忽略大小写的方式
            //输出:True
            var result = str.StartsWith("Hello",true,Thread.CurrentThread.CurrentCulture);

            //判断str字符串是不是以"Hello"字符串开头,"Hello"字符串和"Hello World"字符串的比较方式为以中文(zh-CN代表中文0)为背景的情况下不忽略大小写的方式
            //输出:True
            var result1 = str.StartsWith("Hello", false, new System.Globalization.CultureInfo("zh-CN"));
            Console.WriteLine(result+"...."+ result1);//输出:True....True

 

 

 

在介绍Split前,介绍一个枚举,设置Split处理后的字符串数组是否输出空字符串

    public enum StringSplitOptions
    {
        //
        // 摘要:
        //     返回的值包括数组的元素,包含一个空字符串
        None = 0,
        //
        // 摘要:
        //     返回值不包括包含空字符串的数组元素
        RemoveEmptyEntries = 1
    }

 

(9)、源码如下:

调用代码如下:

            var str = "Hello World";
            //Split不指定参数,默认按照空格对字符串进行分割
            var result = str.Split();
            //输出:Hello和World两个单词
            var en = result.GetEnumerator();
            while (en.MoveNext())
            {
                Console.WriteLine(en.Current);
            }
            Console.WriteLine("----------略微复杂的字符串分割-------------");
            //先按空格对字符串进行分割,得到Hello和World两个字符串
            //在按H对Hello和World进行分割得到空格和ello和World
            //在按l对上面的三个字符串进行分割得到空格和e和空格和o和Wor和d
            //在按r对上面的6个字符串进行分割得到空格和e和空格和o和Wo和空格和d
            var result1 = str.Split(' ','H','l','r');
            var en1 = result1.GetEnumerator();
            while (en1.MoveNext())
            {
                Console.WriteLine(en1.Current);
            }

 

注:如果该方法不给参数,默认按照空格进行分割.

 

(10)、

参数: separator一指定的分隔符   count一分割产生的子字符串的最大数量

 

调用代码如下:

            string delimStr = " ,.:";
            char[] delimiter = delimStr.ToCharArray();
            string words = "one two,three:four.";
            string[] result = default(string[]);
            for (int i = 1; i <=5; i++)
            {
                result = words.Split(delimiter, i);
                Console.WriteLine("根据指定的分隔符将一个字符串拆分成传入的最大数量的子字符串,当前传入的最大数量为:{0}", i);
                foreach (var s in result)
                {
                    Console.WriteLine(s);
                }
            }
            Console.ReadKey();

 

 

(11)、

参数: separator一指定的分隔符   count一分割产生的子字符串的最大数量   options一是否要清除结果中的空字符串

调用代码:

            var str = "Hello World";
            var res = str.Split(new char[] { ' ', 'H' }, 3);
            Console.WriteLine("-----------没有去空格的结果(传入了 StringSplitOptions.None或者不传这个参数(默认这个参数))------------");
            foreach (var i in res)
            {
                Console.WriteLine(i);
            }

            Console.WriteLine("-----------去空格的结果(StringSplitOptions.RemoveEmptyEntries)------------");
            var result = str.Split(new char[]{' ','H'}, 3, StringSplitOptions.RemoveEmptyEntries);
            var en = result.GetEnumerator();
            while (en.MoveNext()) {
                Console.WriteLine(en.Current);
            }
            Console.ReadKey();

 

 

(12)、

作用:根据传入的字符串数组进行分割,并选择性的清除结果集中的空字符串

            var str = "Hello World";
            var res = str.Split(new string[] { "o " }, StringSplitOptions.None);
            Console.WriteLine("-----------没有去空格的结果(传入了 StringSplitOptions.None或者不传这个参数(默认这个参数))------------");
            foreach (var i in res)
            {
                Console.WriteLine(i);
            }

 

(13)、

作用:根据传入的字符串数组进行分割,并选择性的清除结果集中的空字符串,并指定分割产生的最大字符串数.

示例代码和(11)类似

 

(12)、

作用:连接一个字符串数组.传入一个继承了IEnumerable<string>称之为(可枚举字符串对象)

调用代码如下:

// List<string>继承自IEnumerable<string>
var list = new List<string>();
list.Add("1");
list.Add("2");
var result=String.Concat(list);
Console.WriteLine(result);

 

 (13)、源码如下:

红框中的代码说明传入的必须是C#基元类型(包括string)的可枚举数组对象,如果是自定义类型,返回的就是类名的和.

作用:将一个基元类型的可枚举数组对象转换成字符串表现形式

            var list = new List<double>();
            list.Add(11.1);
            list.Add(12.1);
           var result= String.Concat<double>(list);

            var secondList = new List<bool>();
            secondList.Add(true);
            secondList.Add(false);
            var secondResult = String.Concat<bool>(secondList);
            Console.WriteLine(result+"...."+ secondResult);

 

 

(14)、源码如下:

观察源码发现,其实调用了IndexOf实例方法,并指定字符串的比较方式为二进制比较方式,为最快的比较方式.

作用:判断字符串中是否存在传入参数字符串.

调用代码:

            var str = "大学专科";
            var result = str.Contains("大专");
            var result1 = str.Contains("大学");
            Console.WriteLine(result);//输出:False
            Console.WriteLine(result1);//输出:True

 

 

(15)、源码如下:

作用:复制一个字符串变量值到另一个字符串变量

调用代码如下:

            var str = "abc";
            var str1 = "xyz";
            Console.WriteLine("------------下面通过Copy方法赋值--------------");
            str1 = String.Copy(str);
            Console.WriteLine("str 和 str1 {0} 同一个引用地址.",ReferenceEquals(str,str1)?"": "不是");
            Console.WriteLine("str的值和str1的值{0}相等.", string.Equals(str, str1, StringComparison.Ordinal) ? "" : "");
            Console.WriteLine();
            Console.WriteLine("------------下面通过引用赋值--------------");
            str1 = str;
            Console.WriteLine("str 和 str1 {0} 同一个引用地址.", ReferenceEquals(str, str1) ? "" : "不是");
            Console.WriteLine("str的值和str1的值{0}相等.", string.Equals(str, str1, StringComparison.Ordinal) ? "" : "");

 

 

(16)、

参数说明:

sourceIndex - 要复制的此实例中第一个字符的索引

destination - 此实例中的字符所复制到的 Unicode 字符数组

destinationIndex - destination 中的索引,在此处开始复制操作。

count - 此实例中要复制到 destination 的字符数。

调用代码如下:

            string source = "xiaochao";
            char[] destination = {'T','h','e',' ','a','a','a', 'a', 'a', 'a', 'a', 'a',' ','i','s',' ','m','v','p'};
            //从source的索引为0的地方法开始,获取source中source长度个字符,将获取的字符从destination中索引为4的地方开始覆盖
            source.CopyTo(0, destination, 4, source.Length);
            Console.WriteLine(destination);
            source = "I think so!";
            //从source的索引为0的地方法开始,获取source中source长度个字符,将获取的字符从destination中索引为4的地方开始覆盖
            source.CopyTo(0, destination,4 ,source.Length);
            Console.WriteLine(destination);

 

(17)、

String.Format 方法的几种定义:

String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项。
String.Format (String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的文本等效项。
String.Format (IFormatProvider, String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的文本等效项。指定的参数提供区域性特定的格式设置信息。
String.Format (String, Object, Object) 将指定的 String 中的格式项替换为两个指定的 Object 实例的值的文本等效项。 
String.Format (String, Object, Object, Object) 将指定的 String 中的格式项替换为三个指定的 Object 实例的值的文本等效项。

常用的格式化数值结果表

字符

说明

示例

输出

C货币string.Format("{0:C3}", 2)$2.000
D十进制string.Format("{0:D3}", 2)002
E科学计数法1.20E+0011.20E+001
G常规string.Format("{0:G}", 2)2
N用分号隔开的数字string.Format("{0:N}", 250000)250,000.00
X十六进制string.Format("{0:X000}", 12)C
  string.Format("{0:000.000}", 12.2)012.200

常用的几种实例

1、字符串的数字格式

string str1 =string.Format("{0:N1}",56789);               //result: 56,789.0
string str2 =string.Format("{0:N2}",56789);               //result: 56,789.00
string str3 =string.Format("{0:N3}",56789);               //result: 56,789.000
string str8 =string.Format("{0:F1}",56789);               //result: 56789.0
string str9 =string.Format("{0:F2}",56789);               //result: 56789.00
string str11 =(56789 / 100.0).ToString("#.##");           //result: 567.89
string str12 =(56789 / 100).ToString("#.##");             //result: 567

 

2、格式化货币(跟系统的环境关,中文系统默认格式化人民币,英文系统格式化美元

string.Format("{0:C}",0.2)

  

 结果为:¥0.20 (英文操作系统结果:$0.20)

默认格式化小数点后面保留两位小数,如果需要保留一位或者更多,可以指定位数

string.Format("{0:C1}",23.15)

 

结果为:¥23.2 (截取会自动四舍五入)
格式化多个Object实例

string.Format("市场价:{0:C},优惠价{1:C}",23.15,19.82)

 

3、格式化十进制的数字(格式化成固定的位数,位数不能少于未格式化前,只支持整形)

string.Format("{0:D3}",23) //结果为:023
string.Format("{0:D2}",1223) //结果为:1223,(精度说明符指示结果字符串中所需的最少数字个数。)

 

 4、用分号隔开的数字,并指定小数点后的位数

string.Format("{0:N}", 14200) //结果为:14,200.00 (默认为小数点后面两位)
string.Format("{0:N3}", 14200.2458) //结果为:14,200.246 (自动四舍五入)

 

5、格式化百分比

string.Format("{0:P}", 0.24583) //结果为:24.58% (默认保留百分的两位小数)
string.Format("{0:P1}", 0.24583) //结果为:24.6% (自动四舍五入)

 

6、零占位符和数字占位符

string.Format("{0:0000.00}", 12394.039) //结果为:12394.04
string.Format("{0:0000.00}", 194.039) //结果为:0194.04
string.Format("{0:###.##}", 12394.039) //结果为:12394.04
string.Format("{0:####.#}", 194.039) //结果为:194

  

下面的这段说明比较难理解,多测试一下实际的应用就可以明白了。
零占位符: 如果格式化的值在格式字符串中出现“0”的位置有一个数字,则此数字被复制到结果字符串中。小数点前最左边的“0”的位置和小数点后最右边的“0”的位置确定总在结果字符串中出现的数字范围。 “00”说明符使得值被舍入到小数点前最近的数字,其中零位总被舍去。
数字占位符: 如果格式化的值在格式字符串中出现“#”的位置有一个数字,则此数字被复制到结果字符串中。否则,结果字符串中的此位置不存储任何值。
请注意,如果“0”不是有效数字,此说明符永不显示“0”字符,即使“0”是字符串中唯一的数字。如果“0”是所显示的数字中的有效数字,则显示“0”字符。 “##”格式字符串使得值被舍入到小数点前最近的数字,其中零总被舍去。

7、日期格式化

string.Format("{0:d}",System.DateTime.Now) //结果为:2009-3-20 (月份位置不是03)
string.Format("{0:D}",System.DateTime.Now) //结果为:2009年3月20日
string.Format("{0:f}",System.DateTime.Now) //结果为:2009年3月20日 15:37
string.Format("{0:F}",System.DateTime.Now) //结果为:2009年3月20日 15:37:52
string.Format("{0:g}",System.DateTime.Now) //结果为:2009-3-20 15:38
string.Format("{0:G}",System.DateTime.Now) //结果为:2009-3-20 15:39:27
string.Format("{0:m}",System.DateTime.Now) //结果为:3月20日
string.Format("{0:t}",System.DateTime.Now) //结果为:15:41
string.Format("{0:T}",System.DateTime.Now) //结果为:15:41:50

 

18、

获取指定字符数组中的任意字符在此实例中第一个匹配项的从零开始的索引。

调用代码如下:

char[] chars = { 'a', 'e', 'i', 'o', 'u', 'y','A', 'E', 'I', 'O', 'U', 'Y' };
String s = "The long and winding road...";
Console.WriteLine("chars中的第一个字出现在s中的字符是:{0},出现的位置索引是:{1}",s[s.IndexOfAny(chars)], s.IndexOfAny(chars));

 

19、

向当前字符串实例的startIndex的位置,插入一段指定的字符串(value)

调用代码如下:

            String original = "aaabbb";
            Console.WriteLine("原字符串: '{0}'", original);
            String modified = original.Insert(3, " ");
            Console.WriteLine("Insert修改后的字符串: '{0}'", modified);

 

20、

将指定的可枚举基元类型通过传入的分隔字符串进行连接.

调用代码如下:

//将List数组中的元素通过"$$"进行连接
var result=String.Join<int>("$$", new List<int>() { 1, 2, 3, 4, 5, 6 });
Console.WriteLine(result);

 

21、

作用:向当前实例字符串的左边填充空格,以达到totalWidth长度的字符数,以实现右对齐的功能.

调用代码如下:

            String str = "Hello World";
            String result = str.PadLeft(20);
            Console.WriteLine(result);

 

22、

作用:向当前实例字符串的左边填充指定字符(paddingChar),以达到(totalWidth)长度的字符数,以实现右对齐的功能.

 调用代码如下:

            String str = "Hello World";
            String result = str.PadLeft(20,'$');
            Console.WriteLine(result);

 

注:PaddRight方法就不说了

 

23、

作用:移除当前字符串实例从startIndex索引开始的,count个字符

调用代码如下:

            String str = "Hello World";
            //移除空格之后的字符串,输出"Hello"
            String result = str.Remove(str.IndexOf(' ', 0));
            Console.WriteLine(result);

 

24、

通过传入的分割符,对当前的字符串实例进行分割,返回字符串数组,可以指定最多返回的子字符串数量(通过count参数),可以过滤空子字符串(通过options参数)

调用代码如下:

String str = "1$ $2$3$4$ $5";
//根据"$"对str进行分割,最多返回10个子字符串,并且移除结果集空字符串
str.Split("$".ToCharArray(), 10, StringSplitOptions.RemoveEmptyEntries);
            String str = "1$$2$3$4$$5";
            //根据"$"对str进行分割,最多返回10个子字符串,并且移除结果集空字符串
            var result=str.Split("$".ToCharArray(), 10, StringSplitOptions.RemoveEmptyEntries);
            var en = result.GetEnumerator();
            while (en.MoveNext())
            {
                Console.WriteLine(en.Current);
            }

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ListBox 是 C# 中的一个常用控件,它可以用来显示一个列表,用户可以通过 ListBox 来选择一个或多个项目。下面是 ListBox 的用法详解: 1. 添加 ListBox 控件到窗体中 将 ListBox 控件从工具箱中拖拽到窗体中即可。 2. 设置 ListBox 的属性 常用的属性有: - Items:ListBox 中的项目集合。 - SelectionMode:选择模式,可以是 Single(单选)、MultiSimple(多选,按下 Ctrl 键)、MultiExtended(多选,可以使用鼠标拖动)。 - DisplayMember:指定 ListBox 显示项目时所使用的属性。 - ValueMember:指定 ListBox 存储项目时所使用的属性。 3. 添加项目到 ListBox 中 可以通过代码或者设计器来添加项目。 通过代码添加项目: ```csharp listBox1.Items.Add("项目1"); listBox1.Items.Add("项目2"); listBox1.Items.Add("项目3"); ``` 通过设计器添加项目: 在 ListBox 的属性窗口中找到 Items 属性,点击右侧的“…”按钮,在弹出的窗口中添加项目。 4. 获取选中的项目 可以通过 SelectedItem 属性获取当前选中的项目,也可以通过 SelectedItems 属性获取所有选中的项目。 ```csharp // 获取当前选中的项目 string selectedItem = listBox1.SelectedItem.ToString(); // 获取所有选中的项目 List<string> selectedItems = new List<string>(); foreach (var item in listBox1.SelectedItems) { selectedItems.Add(item.ToString()); } ``` 以上就是 ListBox 控件的用法详解。需要注意的是,ListBox 中的项目可以是任何类型的对象,不仅仅是字符串。如果需要在 ListBox 中显示自定义类型的对象,需要通过 DisplayMember 和 ValueMember 属性来指定显示和存储的属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值