基本概念

string是System.String的别名。
字符串是一系列不可修改的Unicode字符,创建字符串后,就不能修改它。

空字符串

l 为赋值的字符串变量:NULL
l 空字符串:(“”)
String.Empty 和“”之间没有差别。

判断字符串是否为空

(1) 检查Length属性是否为零。
① 由于字符串属于引用类型,因此字符串的值可能为NULL,如果是空字符串,调用**Length会导致运行阶段错误**。
(2) 使用String.IsNullOrEmpty方法

  1. public static bool IsNullOrEmpty(string value)
  2. {
  3. if(value != null)
  4. {
  5. return (value.Length == 0);
  6. }
  7. return true;
  8. }

字符串操作

System.String 类提供了大量的方法和属性,可用于操作字符串。
实际上,System.String定义了40多个公有成员

提取子串

  1. string original = "The quick brown fox";
  2. string substring = original.Substring(10);
  3. string substring2 = original.Substring(4, 5);

IndexOf和LastIndexOf分别指出指定的字符或字符串首次最后一次出现的位置。

比较字符串

方法名 说明
Compare 以区分大小写和区域敏 感的方式进行比较。
CompareOrdinal 可指定从两个字符串的什么地方开始比较以及最多比较多少个字符
CompareTo 当前字符串与指定的字符串进行比较并返回一个整数值,它指出当前字符串在排序顺序中位于指定字符串之前、之后还是同一个位置。
Contains 使用序号排序规则(ordinal sorting rules)进行搜索,让您能够判断当前字符串是否包含指定字符串。
Equals
StartsWith
EndsWith
让您能够判断当前字符串的开头或结尾是否与指定字符串匹配。

改变大小写

方法:ToUpperInvariant
使用固定区域性的大小写规则将字符串转换为全部大写。
方法:ToLowerInvariant
将字符串转换为全部小写
ToUpper和ToLower:使用当前区域或指定区域的大小写规则,取决于使用哪个重载版本。

修改字符串的某些部分

由于字符串是不可变的,因此这些方法实际上返回一个新字符串,而不是修改当前字符串。
要删除字符串中的空格和其他字符,可使用方法Trim、TrimEnd 或 TrimStart。TrimEnd和TrimStart分别删除当前字符串开头或末尾的空格,而Trim将两端的空格都删除。

方法名 说明
Trim 将两端的空格都删除
TrimStart 删除当前字符串开头的空格
TrimEnd 删除当前字符串末尾的空格
PadLeft
PadRight
将字符串扩展(填充)到特定的长度,一般使用空格填充。
Remove 从字符串的指定位置开始删除,直到到达字符串末尾或删除了指定数量的字符。
Replace 将指定的字符或字符串都替换为另一个字符或字符串,它执行序号搜索,即区分大小写,但是不区分区域性。


  1. Console.WriteLine(original.Replace("o","x")+"\n");
  2. original = " The quick brown fox ";
  3. Console.WriteLine(original.Remove(4));
  4. original = " The quick brown fox ";
  5. Console.WriteLine(original.Remove(4, 5) + "\n");

字符串拼接、串联和拆分

字符串拼接:通过合并现有字符串来创建新字符串;
使用加法运算符拼接字符,加法运算符实际上调用
方法Concat的合适重载版本。

  1. string string1 = "this is " + " basic concatenation.";
  2. string string2 = String.Concat("this", "is", "more", "advanced", "concatenation");

字符串串联:将一组指定的字符串拼接起来,同时在字符串之间加上指定的分隔符
分割字符串:根据分隔字符将字符串拆分成数量不确定的子串;
使用split方法:接受一组字符或字符串并将其视为分隔符

  1. string[] strings = new string[10];
  2. for (int i = 0; i < 10; i++)
  3. {
  4. strings[i] = String.Format("{0}",i*2);
  5. }
  6. string joined = String.Join("#", strings);
  7. Console.WriteLine(joined+"\n");
  8. foreach (string word in joined.Split(new char[] { '#' }))
  9. {
  10. Console.WriteLine(word );
  11. }

创建可变的字符串

如果要拼接的字符串数量是固定的,那么使用 string 更合适;
如果要拼接的字符串数量不确定(如迭代语句中),那么使用StringBuilder更合适。
StringBuilder
方法:

方法名 说明
Append 将对象的文本或字符串表示加在当前字符串末尾
AppendFormat 支持使用复合格式化(composite formatting)在当前字符串末尾追加文本。
可以向它传递一个格式字符串
  1. StringBuilder stringBuilder = new StringBuilder();
  2. for (int i = 0; i < 10; i++)
  3. {
  4. stringBuilder.AppendFormat("{0}", i * 2);
  5. }
  6. Console.WriteLine(stringBuilder);
  7. stringBuilder.Remove(stringBuilder.Length - 1, 1);
  8. Console.WriteLine(stringBuilder);
  9. string joined = String.Join ("#", stringBuilder.ToString);
  10. Console.WriteLine(joined);
  11. foreach (string word in joined.Split(new char[] { '#' }))
  12. {
  13. Console.WriteLine(word);
  14. }


StringBuilder还有最大容量,其值为Int32.Maxvalue,即 231个字符

类型格式化

通过设置格式,可将类实例、结构或枚举值转换为字符串表示。
从 System.Object派生而来的每种类型都自动继承了一个没有参数的 ToString方法,这个方法默认返回类型的名称。
重写ToString

  1. class Contact
  2. {
  3. private string firstName;
  4. private string lastName;
  5. public override string ToString ()
  6. {
  7. return firstName + " " + lastName;
  8. }
  9. }

标准格式字符串

标准格式字符串包含一个格式说明符和一个可选的精度说明符,
格式说明符是单个字符,
精度说明符影响结果中显示的位数。
精度说明符可以是0~99的任何整数。

自定义格式字符串

自定义格式字符串由一个或多个自定义格式说明符组成,定义了值的字符串表示。
如果格式字符串只包含一个自定义格式说明符,就应在它前面加上百分符号(%),以免与标准格式说明符混淆。

  1. DateTime date = new DateTime(2020, 3, 13);
  2. Console.WriteLine(date.ToString("%M"));
  3. Console.WriteLine(date.ToString("dddd MMMM dd,yyyy"));


复合格式化

使用复合格式化的方法接受一个复合格式字符串和一个对象列表作为参数。
格式项语法:
{index[,alignment][:formatString]}
其中,index大括号是必不可少的。
索引:对应于参数列表中对象的位置。索引从零开始,但是多个格式 项可使用相同的索引,而格式项可以任何顺序排列,并可指向列表中的任何对象。
alignment:是可选的,指定了首选的字段宽度。如果为正值:字段将右对齐。如果为负值:字段将左对齐。如果指定的值比格式化后的字符串长度小,就将忽略alignment值。
formatString:使用标准格式字符串或自定义格式字符串。如果没有指定,就将使用常规格式说明符G。

  1. Celsius temp = new Celsius(28);
  2. string result = String.Format
  3. ("On {0:d},the high temperature was {1}."DateTime.Today,temp);

正则表达式

正则表达式描述了一组字符串。将正则表达式应用于字符串
(一)确定该字符串是否与指定的模式匹配
(二)返回一个或一系列子串
(三)返回对原始字符串修改后得到的新字符串
.NET Framework中的正则表达式与Perl 5正则表达式兼容,包含其他正则表达式实现。


C#中的正则表达式类

(一)Regex类
1.提供正则表达式分析器和引擎的实现,它将正则表达式应用于输入字符串。
2.可以快速分析大量文本,看其是否符合特定模式,可以轻松提取和编辑字符串。
3.提供了实例成员静态成员,两种方式使用。
(1)使用实例时,不会编译和缓存表达式模式;
(2)使用静态方法,将编译和缓存表达式模式;(默认情况下表达式引擎将缓存最近使用的15个静态正则表达式)
(3)如果大量使用一组固定的正则表达式,就应使用一组固定的正则表达式,就应使用静态方法,而不是相应的实例方法。
(二)Match和MatchCollection
1.MatchCollection包含一组Match实例。
2.将正则表达式应用于字符串时,将Match类的实例表示第一个匹配项。
(三)Group和Capture
1.Match.Groups属性表示单个匹配项中所有的捕获组。每个捕获组都是一个Group实例,而Group实例包含一组Capture对象,这些对象可通过Capture属性获取。Capture表示单个子表达式匹配返回的结果。