【C#冷知识系列】(三)关于字符串的冷知识-创新互联

字符串忽略转义符

string i = "sss\ssss";
string i = @"sss\ssss";

输出:
sss"ssss
sss\ssss

模板字符串

string j = $"i is {i}"; 
//那么i的值就会被插入到字符串中。

这里不仅要知道可以这么用,更要知道为什么可以这么用:模板字符串或者叫插值字符串只是String.Format的一个语法糖,编译器会这样解析:

公司主营业务:成都网站设计、成都网站建设、外贸网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出万全免费做网站回馈大家。
string s1 = "Hello";
string s2 = String.Format("Hello, {0}", s1);

注意:

  1. 如果想输出花括号,就写两个大括号

string s1 = "Hello";
Console.WriteLine($"{{s1}}");  // 输出 {s1}
Console.WriteLine($"{{{s1}}}"); // 输出 {Hello}

String类操作字符串的返回值

返回值一定是一个新的字符串,因为String类没有提供任何可以改变其内容的方法

// 这个知识告诉我们在C#中任何字符串的操作,要获得返回值都需要使用新的字符串进行接收的操作
string i = "123";
string j = i.Insert(0, "hello");

输出:
i 123
j hello123

StringBuilder

我们都知道在进行复杂的字符串操作的时候就要用到StringBuilder类,我们不太注意到的是:

  1. StringBuilder工作方式高效但是功能受限,它只能完成文本中的 替换 追加 删除的工作。
    下面是StringBuilder提供的主要方法:
    【C#冷知识系列】(三)关于字符串的冷知识

  2. 我们应该尽可能的在初始化的时候把容量设置为可能的大长度以保证不需要重新分配内存,可以提高效率。下面是使用容量初始化StringBuilder的例子:

// 下面三个初始化都可以初始化一个StringBuilder
// 按照容量
StringBuilder sb = new StringBuilder(20);
// 使用字符串初始化
StringBuilder sb1 = new StringBuilder("Hello");
// 使用字符串初始化同时指定容量
StringBuilder sb2 = new StringBuilder("Hello", 20);

字符串格式化

  1. 格式化的语法

    在模板字符串中要用冒号分割变量与格式化字符串

var time = DateTime.Now;
Console.WriteLine($"{time:D}");   // 2018年12月5日
Console.WriteLine(time.ToString("D")); // 2018年12月5日
  1. 内置的格式化

    格式字符串结果
    n2,440.012 有逗号分隔,有小数点
    e2.44e+003 指数表示法
    x9ad 十六进制
    c$2,440.002 货币
    //       d: 6/15/2008
    //       D: Sunday, June 15, 2008
    //       f: Sunday, June 15, 2008 9:15 PM
    //       F: Sunday, June 15, 2008 9:15:07 PM
    //       g: 6/15/2008 9:15 PM
    //       G: 6/15/2008 9:15:07 PM
    //       m: June 15
    //       o: 2008-06-15T21:15:07.0000000
    //       R: Sun, 15 Jun 2008 21:15:07 GMT
    //       s: 2008-06-15T21:15:07
    //       t: 9:15 PM
    //       T: 9:15:07 PM
    //       u: 2008-06-15 21:15:07Z
    //       U: Monday, June 16, 2008 4:15:07 AM
    //       y: June, 2008
    //       
    //       'h:mm:ss.ff t': 9:15:07.00 P
    //       'd MMM yyyy': 15 Jun 2008
    //       'HH:mm:ss.f': 21:15:07.0
    //       'dd MMM HH:mm:ss': 15 Jun 21:15:07
    //       '\Mon\t\h\: M': Month: 6
    //       'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00

    关于内置的格式化,如果大量经常使用的话,推荐点击这里下载微软提供的工具来帮助格式化。

    1. 日期的格式化

    2. 数字的格式化(格式化字符串不区分大小写)

  2. 自定义格式化

    除了使用内置的格式化,我们还能自定义格式化字符串和格式化的结果,方法就是实现IFormattable接口,下面举个例子

定义:

public class Student : IFormattable
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public override string ToString()
    {
        return FirstName + " " + LastName;
    }
    public string ToString(string format) => ToString(format, null); 
    public string ToString(string format, IFormatProvider formatProvider)
    {
        switch (format)
        {
            case "A":
                return ToString();
            case "F":
                return FirstName;
            case "L":
                return LastName;
            default:
                throw new FormatException($"invaild format string {format}");
        }
    }
}

使用:

Student stu = new Student { FirstName = "First", LastName = "Last" };
Console.WriteLine(stu.ToString("F"));   // 输出 First

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前文章:【C#冷知识系列】(三)关于字符串的冷知识-创新互联
网站链接:http://pwwzsj.com/article/dighec.html