一,字符Char

1,Char主要用来存储单个字符,占用16位(两个字节)的内存空间。在定义字符变量时,要使用单引号,如'a'表示一个字符,“a”表示一个字符串。

Char常用的方法如表1所示

表1 Char类常用方法及说明

方法

说明

IsControl

指示指定的Unicode字符是否属于控制类字符类别

IsDigit

指示某个Unicode字符是否属于十进制数字类别

IsHighSurrogate

指示指定的char对象是否为高代理项

IsLetter

指示某个Unicode字符是否属于字母类别

IsLetterOrDigit

指示某个Unicode字符是属于字母类别还是属于十进制数字类别

IsLower

指示某个Unicode字符是否属于小写字母类别

IsLowSurrogate

指示指定的char对象是否为低代理项

IsNumber

指示某个Unicode字符是否属于数字类别

IsPunctuation

指示某个Unicode字符是否属于标点符号类别

IsSeparator

指示某个Unicode字符是否属于分隔符类别

IsSurrogate

指示某个Unicode字符是否属于代理项字符类别

IsSurrogatePair

指示两个指定的Char对象是否形成代理项对

IsSymbol

指示某个Unicode字符是否属于符号字符类别

IsUpper

指示某个Unicode字符是否属于大写字母类别

IsWhiteSpace

指示某个Unicode字符是否属于空白类别

Parse

将指定字符串的值转换为它的等效Unicode字符

ToLower

将Unicode字符的值转换为它的小写等效项

ToLowerInvariant

使用固定区域性的大小写规则,将Unicode字符的值转换为其小写等效项

ToString

将此实例的值转换为其等效的字符串表示

ToUpper

将Unicode字符的值转换为它的大写等效项

ToUpperInvariant

使用固定区域性的大小写规则,将Unicode字符的值转换为其大写等效项

TryParse

将指定字符串的值转换为它的等效Unicode字符

char a = 'a';

 char b = '8';

 Console.WriteLine("a是否为字母 {0}",char.IsLetter(a));

 Console.WriteLine("b是否为数字 {0}", char.IsDigit(b));

 Console.ReadLine();

2,转义字符

转义字符是一种特殊的字符变量,其以反斜线“\”开头,后跟一个或多个字符。转义符“\”(单个反斜杠)只针对后面紧跟着的单个字符进行操作。

表2 转义字符

转义符

说明

\n

按Enter键换行

\t

横向跳到下一制表位置

\”

双引号

\b

退格

\r

按Enter键

\f

换页


\\

反斜线符

\’

单引号符

二,字符串String

在C#中由双引号(“”)包围的都是字符串,不能作为其他数据类型来使用。

声明字符串变量必须经过初始化才能使用。

1,连接多个字符串。使用“+”运算符可完成对多个字符串连接的功能。

string s1 = "A";

 string s2 = "8";

 Console.WriteLine("s1+s2为: {0}", s1+s2);

2,比较字符串

对字符串值进行比较时,可以使用比较运算符“==”实现。也可以使用常用的比较字符串的方法Compare()、CompareTo()、Equals()方法。

a,采用“==”比较

string s1 = "A";

 string s2 = "8";

  Console.WriteLine(s1==s2);

b,采用Compare()方法

 string s1 = "A";

  string s2 = "B";

 Console.WriteLine(string.Compare(s1, s2));//s1<s2,输出结果为-1

 Console.WriteLine(string.Compare(s2, s1));//输出结果为1

c,采用CompareTo()  

如果s1的值与s2的值相等,则返回0;如果s1大于s2的值,则返回1,否则返回-1

            string s1 = "A";

            string s2 = "B";

            Console.WriteLine(s1.CompareTo(s2));//值为-1

d,采用Equals()方法

如果s1的值等于s2的值,返回true,否则为false

            string s1 = "A";

            string s2 = "B";

            Console.WriteLine(s1.Equals(s2));//false

            Console.WriteLine(string.Equals(s1,s2));//false

3,格式化字符串

表3 用于日期时间的格式规范

格式规范

说明

d

简短日期格式(YYYY-MM-dd)

D

完整日期格式(YYYY年MM月dd日)

t

简短时间格式(hh:mm)

T

完整时间格式(hh:mm:ss)

f

简短的日期/时间格式(YYYY-MM-dd  hh:mm)

F

完整的日期/时间格式(YYYY年MM月dd日  hh:mm:ss)

g

简短的可排序的日期/时间格式(YYYY-MM-dd hh:mm)

G

完整的可排序的日期/时间格式(YYYY-MM-dd hh:mm:ss)

M或m

月/日格式(MM月dd日)

Y或y

年/月格式(YYYY年MM月)

            DateTime s1 = DateTime.Now;

            string s2 = string.Format("{0:D}", s1);//按完整日期格式输出

            Console.WriteLine(s2);

4,截取字符串

String 类提供了Substring()方法,该方法可以截取字符串中指定位置和长度的字符串。语法如下:

public string Substring(int startindex,int length)

startindex:子字符串的起始位置索引。length:子字符串中的字符数。

如果length的长度大于截取字符串的长度,将从起始位置处截取之后的所有字符。

            string s1 = "12345678";

            string s2 = "";

            s2 = s1.Substring(2, 4);

            Console.WriteLine(s2);//输出结果为3456

5,分割字符串

String类提供了一个Split()方法用于分割字符串,此方法的返回值是包含所有分割字符串的数组对象,可以通过数组取得所有分割的子字符串。语法如下:

public string[] Split(params char[]separator)

separator:是一个数组,包含分隔符。

            string s1 = "12345,6789";

            char[] s2 = { ','};//创建一个分隔符

            string[] s3=new string[100];//创建一个数组,接收分割后的字符串

            s3= s1.Split(s2);

            for (int i = 0; i < s3.Length; i++)
            {
                Console.WriteLine(s3[i]);//输出结果为12345  6789
            }

6,插入和填充字符串

6.1 插入字符串。String类提供了Insert()方法,用于向字符串的任意位置插入新元素,语法如下

public string Insert(int startindex,string value);

startindex:用于指定所要插入的位置,索引从0开始。

            string s1 = "1234";

            string s2 = "abc";

            string s3=s1.Insert(2, s2);

            Console.WriteLine(s3);//输出结果为:12abc34

6.2 填充字符串。string类提供了PadLeft()/PadRight()方法用于填充字符串,PadLeft()方法在字符串的左侧进行字符串填充,而PadRight()方法在字符串的右侧进行填充。语法如下

public string PadLeft(int totalwidth,char paddingchar);

totalwidth:指定填充后的字符串长度。paddingchar:指定所要填充的字符,如果省略,则填充空格符号

            string s1 = "1234";

            string s2 = s1.PadLeft(5,'(');

            string s3 =s2.PadRight(6,')');

            Console.WriteLine(s3);//输出结果为:(1234)

7,删除字符串。string类提供了Remove()方法,用于从一个字符串的指定位置开始,删除指定数量的字符,语法如下

public string Remove(int startindex);//删除从指定位置到最后位置的所有字符

public string Remove(int startindex,int count);//从指定位置开始删除指定书面的字符

startindex:用于指定开始删除的位置,索引从0开始;count:指定删除字符数量。

            string s1 = "12345678";

            string s2 = s1.Remove(2);

            string s3 = s1.Remove(2,3);

            Console.WriteLine(s2);//出错结果:12

            Console.WriteLine(s3);//输出结果:12678

8,复制字符串

String提供了Copy()和CopyTo()方法,用于将字符串后子字符串复制到另一个字符串后Char类型的数组中。

8.1 Copy()方法。创建一个与指定的字符串具有相同值的字符串的新实例。语法如下

public static string Copy(string str);//str:是要复制的字符串
            string s1 = "12345";

            string s2 =string.Copy(s1);

            Console.WriteLine(s2);//输出结果为:12345

8.2 CopyTo()方法,可以将字符串的某一部分复制到另一个数组中,语法如下

public void CopyTo(int sourceindex, char[] destination,int destinationindex,int count)

sourceindex:需要复制的字符的起始位置。

destination:目标字符数组。

destinationindex:指定目标数组中的开始存放位置。

count:指定要复制的字符个数。

 string s1 = "12345";

 char[] s2 = new char[100];

 s1.CopyTo(1, s2, 0, 2);//索引从1开始复制s1字符串,复制两个字符,从索引0开始存放到s2中

Console.WriteLine(s2);//输出结果为:23

9,替换字符串

String提供了Replace()方法,用于将字符串中的某个字符或字符串替换成其他的字符或字符串。

public string Replace(char Ochar,char Nchar);

public string Replace(string Ovalue, string Nvalue);

Ochar:待替换的字符。Nchar:替换后的新字符。

Ovalue:待替换的字符串。Nvalue:替换后的字符串。

 string s1 = "12345";

 string s2 = s1.Replace("234", "abc");//用"abc",替换s1中的"234"

 Console.WriteLine(s2);//输出结果是:1abc5

三,可变字符串类StringBuilder

1, 对于创建成功的字符串对象,它的长度是固定的,内容不被改变和编译。当对字符串进行修改时,会在内存中创建新的字符串对象,如果重复地对字符串进行修改,将极大地增加系统开销。而C#提供了一个可变的字符序列StringBuilder,大大提高了频繁增加字符串的效率。

StringBuilder创建对象方式:

StringBuilder s1 = new StringBuilder();

StringBuilder类存在于System.Text命名空间中,如果要创建StringBuilder对象,首先必须引用此命名空间。

StringBuilder类常用的方法及说明

方法

说明

Append

将文本或字符串追加到指定对象的末尾

AppendFormat

自定义变量的格式并将这些值追加到StringBuilder对象的末尾

Insert

将字符串或对象添加到当前StringBuilder对象中的指定位置

Remove

从当前StringBuilder对象中移除指定数量的字符

Replace

用另一个指定的字符来替换StringBuilder对象内的字符

 StringBuilder s1 = new StringBuilder("12345");
 Console.WriteLine(s1);

s1.Append("abc");
 Console.WriteLine(s1);//输出结果为:12345abc

 s1.Insert(0, "m");
  Console.WriteLine(s1);//输出结果为:m12345abc

 s1.Remove(1, 2);
 Console.WriteLine(s1);//输出结果为:m345abc

  s1.Replace("m","xy");
 Console.WriteLine(s1);//输出结果为:xy345abc

 s1.AppendFormat("{0:C}", 1000);
 Console.WriteLine(s1);//输出结果为:xy345abc¥1000.00

2,StringBuilder类与String类的区别

String对象是不可改变的,每次使用String类中的方法时,都要在内存中创建一个新的字符串对象,这就需要为该新的对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用StringBuilder类。

例如,当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能。