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


    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.

     

  • 相关阅读:
    PTA(Advanced Level)1009.Product of Polynomials
    PTA(Advanced Level)1002.A+B for Polynomials
    PTA(Advanced Level)1065.A+B and C
    PTA(Advanced Level)1046.Shortest Distance
    PTA(Advanced Level)1042.Shuffling Machine
    PTA(Basic Level)1046.划拳
    PTA(Basic Level)1060.爱丁顿数
    PTA(Basic Level)1053.住房空置率
    PTA(Basic Level)1023.组个最小数
    DOM4J熟知
  • 原文地址:https://www.cnblogs.com/JessieY/p/2438628.html
Copyright © 2020-2023  润新知