一、MSDN描述

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

命名空间 : System

程序集 : mscorlib.dll

继承关系:

备注:

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

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

string str1 = ""+"b"; 这句话设计到1个String对象

using System;
class App
{
static void Main()
{
// 这段代码会创建3个 string 对象
string str = "a";
str += "";
str += "";
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 指令是向堆上创建字符串对象的指令

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)

 using System;

 class App
{
static void Main()
{
var str = "Zheng_fei_男_26岁";
var strArray1 = str.Split('_');
var strArray2 = str.Split(new char[]{'男','_'}); // Char 是 Unicode字符
var strArray3 = str.Split('U'); // 没有匹配成功,则返回原字符串 foreach(var item in strArray1)
{
Console.WriteLine(item);
}
foreach(var item in strArray2)
{
Console.WriteLine(item);
}
foreach(var item in strArray3)
{
Console.WriteLine(item);
}
}
}

Substring 截取字串

函数原型:

1. public string Substring(int startIndex)

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

 using System;

 class App
{
static void Main()
{
var str = "Zheng_fei_男_26岁";
var childStr1 = str.Substring(,); // string 其实是 Char[] 数组下标从0取
var childStr2 = str.Substring();
Console.WriteLine(childStr1);
Console.WriteLine(childStr2);
}
}

Replace  字符串替换

函数原型:

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

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

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

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

 using System;

 class App
{
static void Main()
{
string str = "Zheng_fei_男_26岁";
var strReplaced1 = str.Replace('_',' ');// str.Replace("_"," ");
var strReplaced2 = str.Replace("Zheng_fei","Aphasia");
Console.WriteLine(strReplaced1);
Console.WriteLine(strReplaced2);
}
}

三、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     匹配数字
\b     匹配单词的开始或结束,也即单词的分界处
^      匹配字符串的开始
$      匹配字符串的结束

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

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

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

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

例1:匹配单词 Hi

正则表示内容:\bHi\b

4.1.3  转义字符

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

例2:匹配 Aphasia.cn

^Aphasia\.cn$

4.1.4 重复

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

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

正则表示内容:\bHi\b.*\bLucy\b

4.1.5 方括号[]

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

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 = "";
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, @"\bHi\b");
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);

未完

类库探源——System.String的更多相关文章

  1. 类库探源——System.Delegate

    一.MSDN 描述 Delegate 类:表示委托,委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法.(是不是感觉很像C语言中的函数指针 :) ) 命名空间: System 程序集:   ...

  2. 类库探源——System.Configuration 配置信息处理

    按照MSDN描述 System.Configuration 命名空间 包含处理配置信息的类型 本篇文章主要两方面的内容 1. 如何使用ConfigurationManager 读取AppSetting ...

  3. 类库探源——System.Drawing.Bitmap

    一.System.Drawing.Bitmap Bitmap 类: 封装GDI+ 位图,此位图由图形图像及其属性的像素数据组成.Bitmap 是用于处理由像素定义的图像的对象 命名空间: System ...

  4. 类库探源——System.Drawing

    一.System.Drawing 命名空间简述 System.Drawing 命名空间提供访问 GDI+ 的基本功能,更高级的功能在 System.Drawing.Drawing2D,System.D ...

  5. 类库探源——System.ValueType

    一.MSDN描述 ValueType 类:提供值类型的基类 命名空间: System 程序集:   mscorlib.dll 继承关系: 值类型包括:字符.整数.浮点.布尔.枚举.结构(其实字符.整数 ...

  6. 类库探源——System.Exception

    一.MSDN描述 Exception 类: 表示在应用程序执行期间发生的错误 命名空间 : System 程序集:   mscorlib.dll 继承关系: 常用属性(含字段)和方法: 1. 属性Me ...

  7. 类库探源——System.Type

    一.MSDN 描述 Type 类:表示类型声明:类类型.接口类型.数组类型.值类型.枚举类型.类型参数.泛型类型定义.以及开放或封闭构造的泛型类型. 命名空间: System 程序集:mscorlib ...

  8. 类库探源——System.Math 和 Random

    一.System.Math Math类:为三角函数.对数函数和其他通用数学函数提供常数和静态方法 命名空间: System 程序集 :   mscorlib.dll 继承关系: 常用属性: Math. ...

  9. 类库探源——System.Environment

    Environment 类: 提供有关当前环境和平台的信息以及操作它们的方法.此类不能被继承. 命名空间: System 程序集:   mscorlib.dll 继承关系: 常用属性(字段)和方法: ...

随机推荐

  1. ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

    Centos5.5 安装Oracle11g客户端,配置了本地的net服务后,用sqlplus连接报错: tnsnames.ora配置如下 orcl = (DESCRIPTION = (ADDRESS ...

  2. HDOJ/HDU 1180 诡异的楼梯(经典BFS-详解)

    Problem Description Hogwarts正式开学以后,Harry发现在Hogwarts里,某些楼梯并不是静止不动的,相反,他们每隔一分钟就变动一次方向. 比如下面的例子里,一开始楼梯在 ...

  3. 洛谷1440 求m区间内的最小值

    洛谷1440 求m区间内的最小值 本题地址:http://www.luogu.org/problem/show?pid=1440 题目描述 一个含有n项的数列(n<=2000000),求出每一项 ...

  4. Centos6 编译安装局域网NTP服务器

    一.条件及环境: 1.CentOS:我用的是最新的CentOS 6.5 64位版,此教程应该也适用于RedHat 6及CentOS 6系列所有系统: 2.编译所需环境: 1 # yum -y inst ...

  5. engine中调整Element的上下显示顺序(遮盖)

    pGraphicsContainer.AddElement(pElement, 0); Engine中IGraphicsContainer类似于栈,加Element时,默认加到第一个,所以会将之前加的 ...

  6. java消息队列使用场景

    http://blog.163.com/sir_876/blog/static/11705223201332444647261/ 目前能用到的比较不错的消息队列组件 ,kafka,activeMq, ...

  7. linux杂谈(十九):DNSserver的配置(二)

    1.本机和外网的解析 ​ ​之前讨论了DNS的正向解析和反向解析,但有的时候我们想让DNSserver对于server本机的解析和对于外网的解析是不同的.那就须要在主配置文件里对本机和外网进行不同的配 ...

  8. Android自动关机代码

    http://www.open-open.com/lib/view/open1409209890713.html 要实现自动关机的功能需要手机有root权限,如果手机有root权限,运行该程序时,会提 ...

  9. [ES7] Descorator: evaluated & call order

    When multiple decorators apply to a single declaration, their evaluation is similar to function comp ...

  10. AHCI vs NVMe

    http://www.hkepc.com/13139 儘管現時有不少高階 SSD 產品改用 PCIe 接口,以突破 SATA 接口的頻寬瓶頸,但控制器設計與 SATA  接口 SSD 一樣,採用老舊的 ...