C# string类型小结 (学习日记 2017-04-26)

本文详细介绍了C#中字符串(string)的基本概念与操作方法,包括字符串的比较、索引、复制、截取、链接及修改等功能,同时展示了如何使用各种字符串处理方法实现常见需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

string类型基础:

string类型表示一个字符序列,string在.Net Framework中是String别名,string类型是引用类型的值,但是string类型可以使用运算符(==),(!=)来比较两个字符串对象是否相等。

eg:

      string a = "hello";   
      string b = "h";    
      b += "ello";  
      Console.WriteLine(a == b);                  //比较a和b两个字符串对象,string对象可以使用==
      Console.WriteLine((object)a == (object)b);  //比较a和b两个object对象,object对象不可使用

字符串类型是不可变的,尽管有些时候我们看起来在内存中更改了字符串的内容,实际上是系统从新定义该字符串,并回收

eg:

     string b = "h";   //系统创建string对象b
     b += "ello";      //系统新建string对象b,并将b的内容h字符回收


[]运算符可以支持对string对象的各个字符的只读访问,注意是只读访问

  string str = "test";  
  char x = str[2];        // x 字符内容是3

对字符串的引用包括了使用双引号" "引起来和@符号引起来

原意字符串使用@符号并且用 " " 双引号引起来, 使用原意字符串的好处是不处理转义字符,因此可以迅速写入,完全限定的文件名就是原意字符串

@"c:\Docs\Source\a.txt"  // 比使用转义的方式 "c:\\Docs\\Source\\a.txt"方便  


system.String类

system.String 类的成员有具体以下操作:

  1. 比较String对象
  2. 返回String对象内字符或者字符串的索引值
  3. 赋值String对象的值
  4. 分隔字符串或者组合字符串
  5. 修改字符串
  6. 将数字、日期、时间或枚举值格式转换成String类型
  7. 对字符串进行规范化

比较字符串

注意在比较字符串时,是按照字典排序规则进行的。在字典规则中,前边出现的字母值小于后边出现的字母值,比如说有字符串"FAT"和字符串"FBT"进行比较,降序排序时,"FBT"排在"FAT"前边。 System.String类中用于进行比较字符串的方法有CompareCompareOrdinalCompareToEqualsEndWithStartWith,,,

Compare是String类的静态方法,有6个重载。 用于全面比较两个字符串。CompareTo用于将当前字符串对象与另一个对象作比较

            string a = "xxyyzz";
            string b="yyxxzz";
            a.CompareTo(b);        //a和b进行比较,CompareTo是非静态的,通过对象进行调用。
            string.Compare(a, b); //比较a和b的顺序,并返回一个int值,小于0,a<b  等于0 a=b 大于0 a>b
            string.Compare(a, b, true); //第三个参数表示是否忽略大小写, 返回值同上
            string.Compare(a,2, b,2,4); //比较a和b的子串,参数2是a串子串的起始位置,参数4是b串子串的起始位置,参数5是长度

在实际的编程中,Compare的效率要高过CompareTo

equals方法实际上等价于==运算符 

             string a = "aabbccdd";
             bool result1= a.Equals("aabb");    //string对象a调用Equlas
             bool result2= string.Equals("aabb","aabb");  //stirng类的静态方法Equals

EndWith和StartWith可以指定特定的字符,与string实例的结尾和开头进行比较。

             string a = "aabbccdd";
             bool result3= a.EndsWith("ccdd");    //字符串末尾是否与指定字符串相等,末尾长度由指定字符串决定
             bool result4 = a.StartsWith("aabc"); //字符串开头是否与指定字符串相等,开始长度由指定字符串决定


索引和定位字符串

使用IndexOf  、IndexOfAny 、LastIndexOf、LastIndexOfAny、获取字符串中的字符子串或者字符的索引。

IndexOf用于搜索字符串中某个特定的字符或者子串,返回特定字符或者子串的索引值,区分大小写,默认索引从0开始,如果没有搜索到则返回-1。

IndexOfAny类似IndexOf,用于搜索字符串中某个特定的字符数组中的任意一个字符,(一组字符中的任意一个)并返回第一个遇到的字符的索引值,

             a = "aabbccddee";
             char[] c = new char[] { 'e', 'd' };  //定义一个字符数组,包含字符e和d

             //调用字符串的IndexOfAny查找字符串中是否存在字符数组的值,并返回索引,参数2是查找开始位置,参数3是查找的长度
             int d = a.IndexOfAny(c, 0, 6);      


LastIndexOf对应IndexOf ,后者返回 首次检索到字符的索引位置,前者返回 最后一次检索到字符的索引位置

LastIndexOfAny对应IndexOfAny  ,后者返回首次检索到字符组的索引位置,前者返回最后一次检索到字符组的位置。

复制字符串:

使用Copy和CopyTo可以复制字符串和字符子串到另外一个字符串或者字符char[]数组中。

其中Copy是静态方法,而CopyTo则可以被字符串调用。Copy和CopyTo的区别在于,CopyTo可以复制字符串到字符数组中去。


  string strSource = "changed";
            char[] d = { 'T', 'h', 'e', ' ', 'i', 'n', 'i', 't', 'i', 'a', 'l', ' ',
                'a', 'r', 'r', 'a', 'y' };
            string c = string.Copy(strSource);            //复制字符串,静态方法,返回一个字符串
            strSource.CopyTo(0, d, 4, strSource.Length);  //复制字符串的一部分到字符数组中去,
            Console.WriteLine(c);
            Console.ReadKey();


截取字符串:

使用Substring和Split可以截取字符串,两者的区别在于Substring返回一个字符串,Split返回一个字符串数组,并且Split是根据特殊字符进行截取。

            string strSource = "chan!ge#d";
            string strSub1= strSource.Substring(2); //从字符串的索引为2的开始截取到尾
            string strSub2 = strSource.Substring(1, 5); //截取定长的字符串。                                          
            char[] ch = new char[] {'!','#'};    //特殊字符数组        
            string[] strSplit = strSource.Split(ch);     //多个字符截取字符串,返回一个字符串数组
            foreach (var item in strSplit)
            {
                Console.WriteLine(item+"\n");
            }
            Console.ReadKey();

链接字符串:

使用Concat和Join方法可以链接一个或者多个字符串。Concat方法用于链接一个两个或者多个字符串,而Join则多用于使用特定的字符串分隔字符链接多个字符串(这种情况通常是用在保存特殊格式的字符串,列如将一系列相关的字符串集成),

还可以使用运算符+来链接两个字符串(最常用的方法)

            string strA = "Hello";
            string strB = " World";
            string strC = "Everyone";
            string  newStr1 = String.Concat(strA, " ", strB); //链接两个字符串strA和strB
            Console.WriteLine(newStr1);//“Hello World"
            String[] strArr = { strA, strB ,strC};
            string   newStr2 = String.Join("#", strArr);  //链接字符#链接字符串数组中的字符串,常和Split对应使用。
            Console.WriteLine(newStr2);//"Hello#World#Everyone"
            Console.ReadKey();

字符串大小写转换:

使用ToUpper可以将字符串转换成大写字母(英文字母),使用ToLower可以转换成小写字母。不需要使用参数。

            string strC = "Everone";
            strC.ToUpper(); //转换成大写的字符 EVERYONE
            strC.ToLower(); //转换成小写的字符 everyone

修改字符串:

可以使用 InsertReplaceRemovePadLeftPadRightTrimTrimEnd 和 TrimStart 可修改字符串的全部或部分。比较重要的有,Insert,Replace。

            string strA = "Hello";
            string strB = " World";
            string strC = "Everone";
            string strD = strA.Replace("He","XX");  //将strA的字符串开头的He替换成XX
            string strE = strC.Remove(4);           //删去字符串从位置4开始的到字符串结束的字符
            string strF = strB.Insert(2,"------");  //从字符串的位置2插入字符串-----
            string strG = strB.PadLeft(10,'#');     //字符串左对齐,对齐长度10,如果字符串长度不够,使用字符#填充
            string strH = strB.PadRight(10, '#');   //字符串右对齐,对齐长度10,如果长度不够,使用字符#填充
            strC.Trim();       //去除前后的空白字符串
            strC.TrimEnd();    //去除指定字符串中的所有尾部匹配项
            strC.TrimStart();  //去除指定字符串所有的首部匹配项
            Console.ReadKey();

格式化字符串

使用Format可以将字符串中的一个或者多个格式项占位符替换为一个或者多个数字、日期时间或者枚举值的文本格式

newStr=String.Format("CurrentTime={0:yyyy-MM-dd}",System.DateTime.Now);  //输出特定格式的时间
Console.WriteLine(newStr);                                               //形如:2006-05-19                         


总结


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值