• 第十二章 管理类型(In .net4.5) 之 操作字符串


    1. 概述

      本章包括 字符串基本操作 以及 查找、遍历、格式化字符串。

    2. 主要内容

      2.1 在.net平台中使用字符串

        C#中,string是用来保存文本信息的。是一个被当做值类型使用的引用类型。

        C#中,string对象是不可变的。每次更改都会重新创建一个string对象。.net内部有称为字符串驻留(interning)的机制来优化效率。

      2.2 操作字符串

        ① StringBuilder 

          StringBuilder 会使用内部的字符串缓存来提高效率。甚至可以允许修改内部某一个字符。

          当操作不定数量的字符串时,StringBuilder是较好的选择。

    StringBuilder sb = new StringBuilder(string.Empty);
    
    for (int i = 0; i < 10000; i++)
    {
        sb.Append("x");
    }

        ② StringWriter 和 StringReader

          两者都使用StringBuilder来实现功能。

      2.3 查询字符串

        ① IndexOf 和 LastIndexOf

    string value = "My sample value";
    int indexOfp = value.IndexOf('p'); // returns 6
    int lastIndexOfm = value.LastIndexOf('m'); //returns 5

        ② StartsWith 和 EndsWith

    string value = "<mycustomeinput>";
    if (value.StartsWith("<")) { }
    if (value.EndsWith(">")) { }

        ③ SubString

        ④ 正则表达式

    string pattern = "(Mr\.? | Mrs\.? | Miss | Ms\.? )";
    string[] names = { "Mr. Henry Hunt", "Ms. Sara Samuels", 
        "Abraham Adams", "Ms. Nicole Norris"};
    
    foreach (string name in names)
        Console.WriteLine(Regex.Replace(name, pattern, String.Empty));

      2.4 遍历字符串

        string实现了IEnumerable 和 IEnumerable<Char> 接口。可用foreach遍历。

      2.5 格式化字符串

    DateTime d = new DateTime(2015, 3, 27);
    CultureInfo provider = new CultureInfo("en-US");
    Console.WriteLine(d.ToString("d", provider)); //3/27/2015
    Console.WriteLine(d.ToString("M", provider)); //March 27

        IFormatProvider 主要用于获取一个控制格式化的对象,不做实际格式化操作。

        IFormattable 提供了把一个对象的值转化成字符串形式的功能。与Convert类所做的正好相反。

        *所有的CultureInfo对象都实现了IFormatProvider接口。

    3. 总结

      ① C#中,string是一种不可变的引用类型。

      ② 进行大量的字符串操作的时候,推荐使用StringBuilder。

      ③ String类提供了大量处理字符串的方法:IndexOf, LastIndexOf, StartsWith, EndsWith, SubString.

      ④ String可以被当做字符集合来遍历。

      ⑤ 格式化是把其他对象当做字符串来显示的过程。

      ⑥ 可以给自己的类型添加字符串格式化操作。

  • 相关阅读:
    Codeforces Round #340 (Div. 2)
    搞清楚一下格式化输出
    TYVJ P1091 等差数列 Label:dp
    TYVJ P1098 任务安排 Label:倒推dp 不懂
    TYVJ P1034 尼克的任务 Label:倒推dp
    TYVJ P1045 &&洛谷 1388 最大的算式 Label:dp
    TYVJ P1046 Blast Label:dp
    TYVJ P1051 选课 Label:多叉转二叉&&树形dp(虐心♥)
    TYVJ P1073 加分二叉树 Label:区间dp
    二叉树遍历入门 Lebal:research
  • 原文地址:https://www.cnblogs.com/stone_lv/p/4372336.html
Copyright © 2020-2023  润新知