zoukankan      html  css  js  c++  java
  • 类库探源——System.String

    一、MSDN描述

    String 类: 表示文本,即一系列的 Unicode 字符

    命名空间 : System

    程序集 : mscorlib.dll

    继承关系:

    备注:

    1. 字符串是 Unicode 字符的有序集合,用于表示文本。String 对象是 System.Char 对象的有序集合,用于表示字符串。

    2. String 对象的值是该有序集合的内容,值不可变,所以String对象称为不可变的

    string str1 = "3"+"b"; 这句话设计到1个String对象
    
    using System;
    class App
    {
        static void Main()
        {        
                    // 这段代码会创建3个 string 对象
            string str = "a";
            str += "1";
            str += "3";        
            Console.WriteLine(str.Length);
        }
    }
    
    /*
    .method private hidebysig static void  Main() cil managed
    {
      .entrypoint
      // 代码大小       32 (0x20)
      .maxstack  2
      .locals init (string V_0)
      IL_0000:  nop
      IL_0001:  ldstr      "a"
      IL_0006:  stloc.0
      IL_0007:  ldloc.0
      IL_0008:  ldstr      "1"
      IL_000d:  call       string [mscorlib]System.String::Concat(string,
                                                                  string)
      IL_0012:  stloc.0
      IL_0013:  ldloc.0
      IL_0014:  ldstr      "3"
      IL_0019:  call       string [mscorlib]System.String::Concat(string,
                                                                  string)
      IL_001e:  stloc.0
      IL_001f:  ret
    } // end of method App::Main
    
    */
    
    上面的 ldstr  指令是向堆上创建字符串对象的指令    
    View Code

    3. 对于需要频繁修改字符串值的地方,请使用 System.Text.StringBuilder

    4. String 和 string 的关系: string 是 String(System.String)在C#中别名

    二、System.String常用属性(含字段)和方法

    属性:
    Length: 获取当前 String 对象中的字符数
    Empty: 表示空字符串。此字段为只读。

    静态方法:
    IsNullOrEmpty
    IsNullOrWhiteSpace
    Format
    Compare

    实例方法

    Contains 是否包含某某字符串

    StartWith 以某某字符串打头

    EndWith 以某某字符串结尾

    Equals 是否等于某某字符串

    IndexOf 返回匹配指定字符(字符串)第一个索引

    Trim 除去头尾空白字符

    ToLower 变小写

    ToUpper 变大写

    Equals(String) 确定此实例与另一实例是否有相同的值


    Split 用某个子字符将原本字符串拆分成字符数组

    函数原型:public string[] Split(params char[] separator)

     1 using System;
     2 
     3 class App
     4 {
     5     static void Main()
     6     {
     7         var str = "Zheng_fei_男_26岁";
     8         var strArray1 = str.Split('_');
     9         var strArray2 = str.Split(new char[]{'','_'}); // Char 是 Unicode字符
    10         var strArray3 = str.Split('U');    // 没有匹配成功,则返回原字符串
    11         
    12         foreach(var item in strArray1)
    13         {
    14             Console.WriteLine(item);
    15         }        
    16         foreach(var item in strArray2)
    17         {
    18             Console.WriteLine(item);
    19         }        
    20         foreach(var item in strArray3)
    21         {
    22             Console.WriteLine(item);
    23         }
    24     }
    25 }
    View Code

    Substring 截取字串

    函数原型:

    1. public string Substring(int startIndex)

    2. public string Substring(int startIndex,int length)

     1 using System;
     2 
     3 class App
     4 {
     5     static void Main()
     6     {
     7         var str = "Zheng_fei_男_26岁";
     8         var childStr1 = str.Substring(0,9);    // string 其实是 Char[] 数组下标从0取
     9         var childStr2 = str.Substring(10);
    10         Console.WriteLine(childStr1);
    11         Console.WriteLine(childStr2);
    12     }
    13 }
    View Code


    Replace  字符串替换

    函数原型:

    返回一个新字符串,其中此实例中出现的所有指定 Unicode 字符都替换为另一个指定的 Unicode 字符

    1. public string Replace(char oldChar,char newChar) 

    返回一个新字符串,其中当前实例中出现的所有指定字符串都替换为另一个指定的字符串

    2. public string Replace(string oldValue,string newValue)

     1 using System;
     2 
     3 class App
     4 {
     5     static void Main()
     6     {
     7         string str = "Zheng_fei_男_26岁";
     8         var strReplaced1 = str.Replace('_',' ');// str.Replace("_"," ");
     9         var strReplaced2 = str.Replace("Zheng_fei","Aphasia");
    10         Console.WriteLine(strReplaced1);
    11         Console.WriteLine(strReplaced2);        
    12     }
    13 }
    View Code

    三、StringBuilder

    StringBuilder 类:表示可变字符字符串。此类不能被继承

    命名空间:System.Text

    程序集:  mscorlib.dll

    继承关系:

    常用构造器:

    StringBuilder()

    StringBuilder(String)

    常用属性和方法:

    Append(各种基础类型)

    Clear 移除当前 StringBuilder 实例中的所有字符

    Replace

    ToString()   将此实例的值转换为 String

    四、正则表达式 

    ==2014-12-22 更新==

    正则表达式又称正规表示式、正规式(Regular Expression 简称regex):描述某种规则的的字符串。

    正则表达式引擎:按正则表达式(某种规则的字符串)处理(匹配、查找等操作)文本的程序

    正则表达式在文本处理中很有用,主流编程语言均有正则表达式的引擎实现,

    4.1 正则表达式

    4.1.1 元字符(metacharacter):正则表达式中的特殊字符

    4.1.2 常见的元字符及说明

    代码      说明
    .       匹配除换行符以外的任意字符
    w     匹配字母或数字或下划线或汉字
    s      匹配任意的字符空白符
    d     匹配数字
         匹配单词的开始或结束,也即单词的分界处
    ^      匹配字符串的开始
    $      匹配字符串的结束

    元字符^和$在验证输入内容时很有用,比如一个网站要求你填写QQ号必须是 5位到12位的数字时,可以使用 ^d{5,12}$ 。

    这里的{5,12}的意思是重复次数 >=5次 && <=12次

    ^d{5,12}$ 与 d{5,12} 的区别:使用^和$确保整个字符串是5到12的数字;不使用^和$只能确保字符串中包含5到12连续位数字。如图:

    匹配字符串开始和结束

    正则测试工具为 deerChao 开发的测试工具,附下载

    例1:匹配单词 Hi

    正则表示内容:Hi

    4.1.3  转义字符

    如果想查找元字符本身,就得用转义字符了,格式 元字符,如: . 代表匹配.

    例2:匹配 Aphasia.cn

    ^Aphasia.cn$

    4.1.4 重复

    代码     说明
    *       重复零次或更多次
    +       重复一次或更多次
    ?       重复零次或一次
    {n}       重复n次
    {n,}      重复n次或更多次
    {n,m}     重复n到m次

    例3 匹配由Hi+若干字符+Lucy组成的字符串

    正则表示内容:Hi.*Lucy

    4.1.5 方括号[]

    [aeiou] 匹配原音
    [0-9]   匹配0到9的数字 和 d 一样
    [34]    匹配3或4
    例4 : [1-9]{4,} 含义是匹配字符中由连续1-9组成的4位字符
    例5 : [34]

    范围匹配2

    4.1.6 花括号(分组)

    (d{1,3}.){3}d{1,3} 的含义:d{1,3}匹配1到3位的数字,(d{1,3}.) 匹配三位数字加上一个英文句号(这个整体就是分组)重复3次,然后在加一个1到3位的数字(d{1,3})

    如 333.444.555.666

    4.1 节内容参考 : http://deerchao.net/tutorials/regex/regex.htm

    4.2 C#的正则表达式引擎

    4.2.1  System.Text.RegularExpressions 命名空间

    System.Text.RegularExpressions 命名空间包含一些类,这些类提供对 .NET Framework 正则表达式引擎的访问

    也就是在C#中用正则表达式要引用System.Text.RegularExpressions 命名空间

    4.2.2 Regex类 ——表示不可变的正则表达式

    命名空间:System.Text.RegularExpressions

    程序集:  System.dll

    继承关系:

    常用构造器:

    Regex()              初始化 Regex 类的新实例

    Regex(String)           为指定的正则表达式初始化并编译 Regex 类的一个新实例

    Regex(String, RegexOptions)   用修改模式的选项为指定的正则表达式初始化并编译 Regex 类的一个新实例

    常用静态方法:

    public static bool IsMatch(string input,string pattern)   指示所指定的正则表达式在指定的输入字符串中是否找到了匹配项

    public static bool IsMatch(string input,string pattern,RegexOptions options) 通过枚举RegexOptions 设置筛选如IgnoreCase忽略大小写等

    例子:

    var charStr = "2";
    var ret = Regex.IsMatch(charStr, "[0-9]");
    Console.WriteLine(ret == true ?"True":"False");

    public static Match Match(string input,string pattern)  在指定的输入字符串中搜索指定的正则表达式的第一个匹配项

    public static MatchCollection Matches(string input,string pattern) 在指定的输入字符串中搜索指定的正则表达式的所有匹配项 

    using System;
    using System.Text.RegularExpressions;
    
    class App
    {
        static void Main()
        {
            var charStr = "Hi hhII HI Hii Hi Hi";
            var ret = Regex.Matches(charStr, @"Hi");
            Console.WriteLine(ret);
            foreach (var item in ret)
            {
                Console.WriteLine(item);
            }
        }
    }

    public static string Replace(string input,string pattern,string replacement)   在指定的输入字符串内,使用指定的替换字符串替换与指定正则表达式匹配的所有字符串

    string source = "张三ABC李四Abc王五";
    var ret = Regex.Replace(source, "abc","|", RegexOptions.IgnoreCase);
    Console.WriteLine(ret);

    未完

  • 相关阅读:
    内存泄漏 Memory Leaks 内存优化 MD
    Handler Thread 内部类引起内存泄露分析
    为什么不取消注册BroadcastReceiver会导致内存泄漏
    WebChromeClient 简介 API 案例
    WebViewClient 简介 API 案例
    java.net.URI 简介 文档 API
    android.net.Uri 简介 API
    RV 多样式 MultiType 聊天界面 消息类型 MD
    JS函数声明与定义,作用域,函数声明与表达式的区别
    CSS中table tr:nth-child(even)改变tr背景颜色: IE7,8无效
  • 原文地址:https://www.cnblogs.com/Aphasia/p/4154441.html
Copyright © 2011-2022 走看看