C#从入门到精通(第四版)学习记录-- 第5章(字符与字符串)

第五章 字符与字符串

5.1 字符类Char的使用

5.1.1 Char类概述

  • Char 类主要用来存储单个字符,占用16位(两个字节)的内存空间;
  • Char 只定义一个Unicode字符;

5.1.2 Char类的使用

在这里插入图片描述

  • Is 开头的方法大多是判断Unicode字符是否为某个类别;
  • To 开头的方法主要是转换为其他Unicode字符;
    char _cA = 'a';    
    Char.IsLetter(a);        //判断a是否是字母

5.1.3 转义字符

  • 转义字符是一种特殊的字符变量,其以反斜线“\”开头,后跟一个或多个字符;
  • 转义字符具有特定的含义,不同于字符原有的意义,故称“转义”;
  • 转义字符\只针对后面跟着的单个字符进行操作;
    在这里插入图片描述

5.2 字符串类String的使用

5.2.1字符串的声明及赋值

  • 声明字符串变量必须经过初始化才能使用,否则编译器会报出“使用了未赋值的变量”;
  • 声明字符串之后,需要对其进行赋值,字符串的赋值使用 “=”

5.2.2连接多个字符串

  • 使用“+”运算符可完成对多个字符串的连接功能,并产生一个String对象;
  • C#中一句相连的字符串不能分开在两行中写,若要写,可以用“+”连接,加号放到换行处;

5.2.3 比较字符串

比较字符串可以使用以下方式:

  1. 使用“==”运算符 (比较的栈里面的值是否相等(值比较))
 bool _bEque ="123"  == "152";  
  1. Equals函数(比较堆里面的值是否相等(引用地址值比较))属于String类,区分大小写,相同返回true,否则为false,两种形式使用:
string _str = "hdb";  
bool _bResult = _ str.Equals("hf");
bool _bResult = String.Equals(_str,"hf");
  1. Compare方法,属于String类:
//值相等返回0,strA大于strB返回1,否则返回-1
Int Compare(string strA,string strB)
Int Compare(string strA, string strB, bool ignorCase)
//…(很多个重载Compare)
  • ignorCase = true时,比较字符串时会忽略大小写的区别;Compare是静态方法,可以直接引用,如:
 Int iResult = String.Compare("123","251");     
  1. CompareTo方法,属于String类,但是以实例对象本身与指定的字符串比较
   strA. CompareTo(strB) 
  //值相等返回0,strA大于strB返回1(字符串strA在字典中的位置比字符串strB的位置靠前),否则返回-1

5.2.4 格式化字符串

详细可参考博客: C#中string.format用法详解

  • String类提供了一个静态的Format方法,把字符串数据格式化成指定的格式,语法格式:
Public static string Format(string format, object obj);

format: 用来指定字符串索要格式化的形式,用{}包起来,
obj: 要被格式化的对象;
在这里插入图片描述
以上是用于日期时间的格式规范

DateTime dt = DateTime.Now;
string str = String.Format("{0:G}",dt);      //2022/12/07 09:29:10
string str1 = String.Format("{0}{1}", 1,"k");    //1k

5.2.5 截取字符

String类提供了一个Substring方法,可以截取字符串中指定位置和指定长度的子字符串,语法格式:

 public string Substring(int startIndex,int length)
  • startIndex: 子字符串的起始位置的索引
  • length:子字符串中的字符数,若length大于截取字符串的长度,将从起始位置的索引处截取之后的所有字符;
    string strA = “sdjskfskf”; string strB = “”; strB = StrA.Substring(0,4); // sdjsk
  • 在提取集合的“切片”时,首选使用范围操作符…(适用版本 C# 8.0+)推荐:var sub = strA [0…4];

5.2.6 分割字符串

String类提供了一个Split方法,可以分割字符串,返回包含所有分割字符串的数组对象,语法格式:

public string[] split(params char[] separator);

separator: 是一个数组,包含分隔符;

  string _str = "123^fkf&kkk";
  char[] separator = { '^', '&' };
  string[] sArray = _str.Split(separator);
  foreach (string i in sArray)
  { 
      Console.WriteLine(i.ToString());
  }
   // 123
  // fkf
  // kkk

用^和&分割字符串,结果放到字符串数组中

5.2.7 插入和填充字符串

String类提供了一个Insert方法,可以在字符串中任意位置插入新的元素,语法格式:

public string Insert(int startIndex, string value
  • startIndex: 子字符串的起始位置的索引,从0开始
  • value:要插入的字符串
string strA ="12345"; 
string strB = StrA.Substring(1,"hh");  //  1hh2345

5.2.8 删除字符串

String类提供了一个Remove方法,可以在字符串中指定位置删除指定数量的字符,语法格式:

public string Remove(int startIndex)
public string Remove(int startIndex, int count)
  • startIndex: 用于指定开始删除的位置,索引从0开始
  • count:要删除字符数量,必须大于0;若不写,默认上面格式,删除指定开始位置后的所有字符
string strA = "12345"; 
string strB = StrA. Remove(3);  //  1234

5.2.9 复制字符串

String类提供了Copy和CopyTo方法,将字符串或字符串复制到另一个字符串或Char类型的数组中:

  1. Copy方法:创建一个与指定的字符串具有相同的字符串的新实例
public static string Copy(string str)
string strA = "sjfn";    
string strB = String.Copy(strA);    
  1. CopyTo方法:可以将字符串的某一部分复制到另一个数组中
public void CopyTo(int sourceIndex, char[] destination, int destinationIndex,int count)

在这里插入图片描述
sourceIndex, destinationIndex, count不能为负数

5.2.10替换字符串

String类提供了Replace方法,将字符串中的某个字符或字符串替换成其他的字符或字符串

public string Replace(char OChar,char NChar)
public string Replace(string OValue,string NValue)

在这里插入图片描述

string strA = "sjfn";    
string strB = strA.Replace("fn","kkk");     //sjkkk

5.3 可变字符串类

  • 字符串创建后长度就固定了,内容不能被修改了。虽然使用“+”可以达到附加新字符或字符串的目的,但会产生新实例,会在内存中创建新的字符串对象。
  • 若重复对字符串修改会极大增加系统的开销,C#提供了StringBuilder类(可变字符串序列)(在命名空间System.Text中)提高频繁修改字符串的效率。

5.3.2 StringBuilder类的使用

在这里插入图片描述

int _iNum = 1000;
StringBuilder _sBString = new StringBuilder("123",100);  //123
_sBString.Append("kkk");   //123kkk
_sBString.AppendFormat("{0:C}", _iNum);  //123kkk¥1,000.00
_sBString.Insert(0,"UT:"); //UT:123kkk¥1,000.00
_sBString.Remove(5, _sBString.Length - 5);   //UT:12      删除的长度不能超过现有的长度,否则会崩溃
_sBString.Replace("UT","SY");  //SY:12
Console.WriteLine(_sBString);

5.3.3 StringBuilder类与String类的区别

  • String对象是不可改变的,每次使用String类中的方法时,都要在内存中创建一个新的字符串对象,这就需要为该对象分配内存空间。频繁操作开销昂贵。
  • 若要修改字符串而不是创建字符串,推荐使用StringBuilder类,如在循环中将许多字符串进行拼接时;
  static void Main(string[] args)
  {
        nString str = "";
        long startT = DateTime.Now.Millisecond;
        for (int i = 0; i < 10000; ++i) { str = str + i; }
        long endT = DateTime.Now.Millisecond;
        Console.WriteLine("string拼接消耗时间:{0}s",endT-startT);  //29s

        StringBuilder builder = new StringBuilder("");
        long  builderStartT = DateTime.Now.Millisecond;
        for (int j = 0; j < 10000; ++j) { builder.Append(j); }
        long builderEndT = DateTime.Now.Millisecond;
        Console.WriteLine("StringBuilder拼接消耗时间:{0}s", builderEndT - builderStartT);  // 1s
        Console.ReadLine();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qzy0621

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值