C#揭秘-操作字符串的方法汇总(5.1)

时间:2021-12-26 16:23:12

5.1 C#字符串类型

字符串是C#内置类型中唯一的引用类型。它具有2个特性:不可变性和密封性。

  • 不可变性:字符串一旦创建好就不能再修改了。
  • 密封性:不能被继承。

Tips:使用智能感知找到重载方法

举个例子,如果你输入str,输入句点.自动填充好字符串,输入C,并且输入左括号(来填充好Compare,可以看到弹出的智能感知。在智能感知弹出框的左侧,会看到上下箭头,标记为1-8,可以按键盘上下箭头来遍历所有可用的重载方法。

5.1.1 格式化字符串

字符串方法Format可以自定义字符串的外观,返回类型为一个新字符串。

            string str2 = "string 2";
            string formatString = "{0,15}";

            string strResult = string.Format(formatString, str2);

            Console.WriteLine("string.Format({0}, {1}) = [{2}]\n", formatString, str2, strResult);

这个例子演示了Format方法接受两个字符串参数,第一个参数format String是一个格式项,它将应应用到第二个参数上,下面是输出:

string.Format({0,15}, string 2) = [       string 2]

如果将15改为-15,结果会左对齐[string 2       ]。

            strResult = string.Format("Currency: {0:C}, Hex: '{0,2:X}'", 10);
            Console.WriteLine(strResult);

格式化字符串允许索引有一个冒号分隔符。格式化项{0:C}的结果是货币输出。Hex格式化项既设置了输出大小,又进行了十六进制转换。这次只有一个参数10,但是有两个格式化项,它们都设为索引0,下面是输出:
Currency: $10.00, Hex: ' A'

如果计算机设置为其他地区,输出将符合你的货币符号和其他的标点符号。

标准数字格式化字符串
标准数字格式化字符串 含义
C或者c 货币
D或d 小数
E或e 指数
F或f 固定点
G或g 常规
N或n 数字
P或p 百分比
R或r 往返(确保将浮点转换为字符串,或将字符串转换为符点)
X或x 十六进制

 

 

 

 

 

 

 

 

 

自定义数字格式化字符串
 自定义数字格式化字符串 含义
0 0占位符
# 数字占位符
. 小数点
, 千位分隔符
% 百分比占位符
E/e +/- 0 (比如,e+0) 科学计数法
\ 转义符
"XYZ"或'XYZ' 文本字符串
; 段分隔符
其他 按其显示的文本

 

 

 

 

 

 

 

 

 

 

 

5.1.2 比较字符串

  1. Compare方法:接受两个字符串参数,并且返回int结果如下:
  • str1<str2=负数
  • str1==str2=零
  • str1>str2=正数
  • 空字符串""总是比null大
  1. CompareOrdinal方法:比较两个字符串,而与其本地化无关。
  • str1<str2=负数
  • str1==str2=零
  • str1>str2=正数
  • 空字符串""总是比null大
  1. CompareTo方法:比较了当前实例与参数字符串的值。它产生下面的整数结果:
  • this<string=负数
  • this==string=零
  • this>string=正数
  • string is null =1

5.1.3 检查字符串是否相等

检查字符串是否相等的一个快速且常见的方法是使用==操作符。

另外,还可以通过实例或者静态Equals方法来检查是否相等。

eg:

静态Equals方法 boolResult=String.Equals(str1, str2);

实例Equals方法 boolResult=str1.Equals(str2);

5.1.4 连接字符串

  1. 连接操作符+   eg: strResult=str1+","+str2;
  2. Concat方法  eg: strResult=String.Concat(str1, str2);

5.1.5 复制字符串

  1. Copy方法用来返回字符串的副本
            string str1 = "string 1";
            string strResult;
            strResult = string.Copy(str1);

            Console.WriteLine("String.Copy({0}) = {1}", str1, strResult);

输出结果为:
string.Copy(string 1) = string 1;

这个例子说明了Copy方法创建了str1的一个副本,结果是str1的副本放置到了strResult中,与strResult = str1; 是不同的。Copy创建了字符串的一个新的实例

  2. CopyTo方法:如果不想复制整个字符串,只想复制一个子集,可用这个方法,它会将字符串中特定数目的字符复制到字符数组。

            char[] charArr = new char[str1.Length];

            str1.CopyTo(0, charArr, 0, str1.Length);

            Console.WriteLine("{0}.CopyTo(0, charArr, 0, str.length) = ", str1);

            foreach (char character in charArr)
            {
                Console.Write("{0} ", character);
            }
            Console.WriteLine("\n");

输出如下:

string 1.CopyTo(0, charArr, 0, str1.Length) =

s t r i n g   1

  3. Clone方法:返回字符串的一个副本。Clone方法返回一个引用,该引用指向的实例与调用Clone方法的实例相同,与=(赋值)操作符相同。因为Clone方法返回一个object引用,所以返回值在赋值之前,必须强制转换为字符串。eg: strResult=(string)str1.Clone();

5.1.6 检查字符串内容

  1. StartWith方法:用来确定一个字符串前缀是否与一个特定字符串匹配。
  2. EndsWith方法:用来判断一个字符串后缀是否与某一个特定字符串匹配。
  3. Contains方法:如果并不限制子字符串是位于字符串的起始或者末尾,可用此方法。

5.1.7 提取字符串的信息

  1. IndexOf方法:返回字符串的位置。如果没有找到,返回-1.字符串的出现位置是以0为基准。
  2. LastIndexOf方法:返回一个字符串或者一组字符在字符串中最后出现的位置。
  3. SubString方法:从字符串的指定位置获取子字符串。第一个参数是起始位置,第二个参数为长度。

5.1.8 填充和移动字符串输出

  1. PadLeft方法:右对齐字符串的字符,使用空格(默认)或者指定字符填充左侧。
  2. PadRight方法:左对齐字符串的字符,使用空格(默认)或者指定字符填充右侧。
  3. Trim方法:从一个字符串的起始或末尾移除空白字符或者指定的字符集。如果只关心移除字符串的一边,也可以使用TrimEnd或者TrimStart.

5.1.9 更改字符串的内容

  1. Insert方法:返回一个字符串,在初始字符串的指定位置放置了一个指定的字符串。
  2. Remove方法:从字符串的某一位置删除指定数目的字符。
  3. Replace方法:用来将出现的所有字符或者字符串替换为一个新的字符或者字符串。
  4. ToLower方法:返回一个转换为小写字符的字符串副本。
  5. ToUpper方法:返回一个转换为大定字符的字符串副本。

Tips:修改字符串

严格地说,我们从未真正修改过字符串。字符串是不可变的,这意味着它无法改动。调用例如Insert, Remove或者Replace这样的方法时,实际上是CLR创建了一个新的字符串对象,并且返回对这个新字符串对象的引用。初始的字符串对象从未改变过。
任何时候看到在字符串上进行了这些操作,认为它应该改变的时候,都应该记住:事实上,只是将操作的结果赋值给了一个新的字符串变量。赋值字符串操作的结果给同样的变量也有效,它公公是将新字符串对象的引用赋值给了同样的变量。

5.1.10 分离和结合字符串

  1. split方法:提取由特定字符集分隔的单独字符串,并且将这些字符串中的每一个都放置到一个字符串数组中。
  2. Join方法:使用一个位于两个字符串之间的特定分隔符来连接它们。John方法是静态的,你需要在string类型上调用它。

5.1.11 操作字符串字符

  1. Length属性:返回字符串中字符的数目。
  2. 字符串索引器:返回字符串中指定位置的字符。索引器就是一对方括号,通常在数组中使用,用于访问对象中的元素。eg:str1[3]
  3. ToCharArray方法:从一个字符串中将字符复制到一个字符数组中。

5.1.12 通过驻留池影响CLR字符串处理

Intern方法:返回一个字符串的引用,该字符串位于一个称作驻留池(intern pool)的地方。该方法接受一个以编程方式创建的字符串参数,并且返回驻留池中对同一字符串的引用。

 

            string str1 = "string 1";
            string objStr1 = string.Concat("string ", "1");
            string internedStr1 = string.Intern(objStr1);

            Console.WriteLine("(object)objStr1 == (object)str1 is {0}\n",
                ((object)objStr1 == (object)str1));

            Console.WriteLine("(object)internedStr1 == (object)str1 is {0}\n",
               ((object)internedStr1 == (object)str1));

第一个结果是False,第二个结果是true。详情见P82.