字符串

一、字符串基础
1、基础而不常用的方法
1>Join:合并字符串数组,创建 一个新的字符串
2>PadLeft:在字符串的左侧,通过添加指定的重复字字符填充字符串
3>PadRight:在字符串的右侧,通过添加指定的重复字字符填充字符串
4>Compare:比较字符串的内容,考虑区域值背景
5>CompareOrdinal:比较字符串的内容,不考虑区域值背景
2、字符串的创建
1、 首先要注意的是利用String类修改字符串时,不是在原来字符串符基础上修改,而是生成新的字符串引用,当频繁修改字符串文字时,性能就会出问题
所以产生了一个StringBuilder类
2、StringBuilder类仅限于处理字符串的替换、追加、删除功能
初始化StringBuilder类时,可以指定包含字符串的实际长度的属性Length,也可以指定字符串在内存中分配的最大值的属性Capital,既可以显示指定也可以隐式指定,隐式指定在构造函数中指定,显示指定调用属性赋值
3、Append()意为追加,有不同的追加,需要时自行参考
4、Replace()意为替换,跟String类一样的功能,但是在过程中不需要复制字符串
5、StringBuilder类无法强制转化成String类,当需要转化时,调用toString()转化
二、字符串格式
1、字符串插值$,允许在字符串花括号中包含占位符来应用代码的结果
2、$代表的最终会被编译成String类的Format方法执行
3、FormatableString类用来获取翻译插值字符串,Format属性返回得到的格式字符串,GetArgument得到指定的值
4、区域值:用来指定不同的区域有不同显示的一种方式,用来指定区域值需要传递IformatPovider的toString方法,此接口在字符换类中由CultureInfo类实现举例说明
private string Invariant(FormattableString s)=>s.ToString(CultureInfo.InvariantCulture);
直接使用FormattableString.Invariant($"day:d")
5、插值的转义花括号多家一个花括号就可以了
6、自定义字符串格式,只需要继承IFormattable 即可举例说明:
public class Person : IFormattable
{
public string FirstName { get; }
public string LastName { get; }

    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }
    public override string ToString()=> FirstName +""+ LastName ;

    public virtual string ToString(string format) => ToString(format, CultureInfo.CurrentCulture);


    public string ToString(string format, IFormatProvider formatProvider)
    {
        if (formatProvider == null) 
        {
            formatProvider = CultureInfo.CurrentCulture;
        } 
        switch (format)
        {
            case null:
            case "A":
                return ToString();
            case "F":
                return FirstName;
            case "L":
                return LastName;
            default:
                throw new FormatException($"invalid format string {format}");
        }
    }
}

当然IFormatProvider接口还可以由NumberFormatInfo类和DateTimeFormatInfo类来实现

posted @ 2019-12-27 17:36  剑道,博也  阅读(111)  评论(0编辑  收藏  举报