C#进阶之路——6.C#字符与字符串

C#进阶之路——6.C#字符与字符串

基础

Char类是C#提供的字符类型,String是C#提供的字符串类型。

 

C#字符

Char类在C#中表示一个Unicode字符。

Char类只定义一个Unicode字符。

 

Char

C#提供的字符类型

String

C#提供的字符串类型

StringBuilder

C#提供的可变字符串类型

 

  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字符

注意:其中以Is和To开头的比较重要。以Is开头的方法大多是判断Unicode字符是否为某个类别,以To开头的方法主要是转换为其他Unicode字符。

 

转义符\

C#采用字符“\”作为转义字符

注意:

转义符\(单个反斜杠)只针对后面紧跟着的单个字符进行操作。

分析器将r视为字符,而将后跟r的反斜杠(\r)视为回车功能。

避免转义序列元素,可以通过以下两种方式避免:

1、  通过@符实现。

2、  通过逐字指定字符串字面值(两个反斜杠)实现。

 

Char示例

  static void Main(string[] args)

{

    char a = 'a';     //声明字符a

    char b = '8';     //声明字符b

    char c = 'L';     //声明字符c

    char d = '.';     //声明字符d

    char e = '|';      //声明字符e

    char f = ' ';      //声明字符f

 

    //使用IsLetter方法判断a是否为字母

    Console.WriteLine("IsLetter方法判断a是否为字母:{0}", Char.IsLetter(a));

 

    //使用IsDigit方法判断b是否为数字

    Console.WriteLine("IsDigit方法判断b是否为数字:{0}", Char.IsDigit(b));

 

    //使用IsLetterOrDigit方法判断c是否为字母或数字

    Console.WriteLine("IsLetterOrDigit方法判断c是否为字母或数字:{0}", Char.IsLetterOrDigit(c));

 

    //使用IsLower方法判断a是否为小写字母

    Console.WriteLine("IsLower方法判断a是否为小写字母:{0}", Char.IsLower(a));

 

    //使用IsUpper方法判断c是否为大写字母

    Console.WriteLine("IsUpper方法判断c是否为大写字母:{0}", Char.IsUpper(c));

 

    //使用IsPunctuation方法判断d是否为标点符号

    Console.WriteLine("IsPunctuation方法判断d是否为标点符号:{0}", Char.IsPunctuation(d));

 

    //使用IsSeparator方法判断e是否为分隔符

    Console.WriteLine("IsSeparator方法判断e是否为分隔符:{0}", Char.IsSeparator(e));

 

    //使用IsWhiteSpace方法判断f是否为空白

    Console.WriteLine("IsWhiteSpace方法判断f是否为空白:{0}", Char.IsWhiteSpace(f));

 

    Console.ReadLine();

}

 

进阶:

 

字符串:

string,String,StringBuilder的区别

 string

string 是C#中的关键字,并且是引用类型, string 类型表示零或更多 Unicode 字符组成的序列。string 是 .NET Framework 中 String 的别名。但定义相等运算符(== 和 !=)是为了比较 string 对象(而不是引用)的值。

String

String是类,表示文本,即一系列 Unicode 字符。String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。如:当我们实例化一个String的对象后,在内存中为此对象分配一个空间。如下:String str = “hello”;当我们修改str的值的时候,如:str = “hello world”;此时,系统会为str重新分配一个空间。这样原来的内存空间就被浪费掉了,只能等待垃圾回收器回收。在需要对字符串执行重复修改的情况下,与创建新的 String对象相关的系统开销可能会非常昂贵。

StringBuilder

可变字符串。string类在重新赋值会重新去分配内存空间,所以为了解决这个问题,微软推出了一个StringBuilder的类,用来进行可变字符串操作。

如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

通过用一个重载的构造函数方法初始化变量,可以创建 StringBuilder 类的新实例,如:StringBuilder MyStringBuilder = new StringBuilder("Hello World!");

 

String方法

比较字符串

(1)Compare:

      Int Compare(string strA,string sreB)

      Int Compare(string strA,string sreB,bool ingorCase)

      //注:ingorCase若为true那么就忽略大小写。

      //返回值:一个32位有符号的整数。

  (2)CompareTo:

      //以实例对象本身与指定的字符串作比较

      public int CompareTo(string strB)

      //返回值:一个32位有符号的整数。

  (3)Equals

      public bool Equals(string value)

      public static bool Equals(string a,string b)

格式化日期

public static string Format(string format,object obj)

//format:指定的格式 格式字符dDfFgGmMrRtTuUyY

//obj:被格式化的对象

格式化字符

val.ToString("格式字符")

c、C       货币格式。

d、D       十进制格式。

e、E       科学计数(指数)格式。

f、F       固定点格式。

g、G       常规格式。

n、N       数字格式。

r、R       往返格式,确保将已转换成字符串的数字转换回数字时具有与原数字相同的值。

x、X       十六进制格式。

截取字符串

public string Substring(int startIndex,int length)

    //startIndex:子字符串起始位置的索引

    //length:子字符串中的字符数

分割字符串

public string[] split(params char[] separator);

        //separator:一个数组包含分隔符

        //返回值:一个数组,其元素包含此实例中的子字符串,这些字符串由separator中的一个或多个字符分隔。

插入字符串

      public string Insert(int startIndex, string value);

 

 

填充字符串:

      public string PadLeft(int totalWidth,char paddingChar);

      //totalWidth:结果字符串中的字符数,等于原始字符数加上任何其他填充字符

      //paddingChar:填充字符

      //返回值左对齐

      public string PadRight(int totalWidth,char paddingChar);

      //返回值右对齐

复制字符串:

 Copy:public static string Copy(string str);

CopyTo:public void CopyTo(int sourceIndex,char[ ]destination,int destinationIndex,int count);

      //sourceIndex:需要复制字符串的起始位置

      //destination:目标字符数组

      //destinationIndex:指定目标数组中的开始存放位置

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

删除字符串:

  public string Remove(int startIndex);

  public string Remove (int startIndex,int count);

替换字符串:

  public string Replace(char Ochar,char NChar);

  public string Replace(string Ovalue,string NValue);

      //Ochar:待替换的字符

      //Nchar替换后的新字符

 

 

String方法示例

字符数组与字符串的转换

(1)ToCharArray()将字符串转换成字符数组

     string s=‘我喜欢博客’;

     char[] chs=s.ToCharArray();

(2)将字符数组new string()得到字符串

     s=new string(chs);

判断字符串是否为空

// IsNullOrEmpty(),返回值为bool类型

string s=null:

   if(string.isNullOrEmpty(s))

   {

     Console.WriteLine("字符串为空");

   }

  else

  {

    Console.WriteLine("字符串不为空");

  }

字符串比较是否相等

// equal(),比较地址

//StringComparison.OrdinalIgnoreCase表示忽略大小写

string s1="abcd";

  string s2="ABCD";

  if(s1.Equal(s2,StringComparison.OrdinalIgnoreCase))

  {

   Console.WriteLine("相同");

  }

  else

  {

  Console.WriteLine("不同");

  }

Compare比较大小

string.Compare(x,y);

//值小于零,x 小于 y。 或 x 为 空引用(在 Visual Basic 中为 Nothing)。

//值等于零,x 等于 y。

//值大于零,x 大于 y。 或 y 为 空引用(在 Visual Basic 中为 Nothing)。

查找字符串中某个字符的位置

(1)IndexOf():查找某个字符在字符串中出现的首位置,从0开始

         string s="我喜欢博客";

         int index=s.IndexOf('喜');//结果是index=1

(2)LastIndexOf()

         string s="我喜欢博客,喜欢这里";

         int index=s.LastIndexOf('喜');//结果是index=6

(3)两个方法都可在字符参数后再跟一个整形参数,表示从第几个开始查找

         string s="我喜欢博客";

         int index=s.IndexOf('喜',1);//从第一个开始查找,包括第一个

字符串截取

//函数Substring()

 string s="abcdefg";

  s=s.Substring(1,4);//表示从第一个开始截取,截取到第四个但不包括第四个;第二个参数可不要,表示截取到最末尾

分割字符串

//split() 

string s = "a , -- b";

  string[] newS = s.Split(new char[] { ' ', '-', ',' }, StringSplitOptions.RemoveEmptyEntries);

//new char[] { 要去除的s字符串中的字符}作用是去掉得到的新字符串数组中的空格

  newS[0]="a";

  newS[1]="b";

字符串插入

// Join()

 string[] names = { "张三", "李四", "王五", "赵六" };

  string s1 = string.Join("|",names);//s1="张三|李四|王五|赵六|"

  string s2 = string.Join("|",1,3.14,true,'c',5000m,"张三");//s2="1|3.14|true|c|5000|张三|"

 

格式化数字

double val=Math.PI;

Console.WriteLine(val.ToString( ));  //displays 3.14159265358979

Console.WriteLine(val.ToString("F3");//displays 3.142

Single val=0.123F;

Console.WriteLine(val.ToString("p"));  //displays 12.30 %

Console.WriteLine(val.ToString("p1"));  //displays 12.3 %

格式化日期

public static void Main(string[] args) 

  {

        DateTime dt = DateTime.Now;

        String[] format = {"d","D","f","F","g","G","m","r","s","t", "T","u", "U","y","dddd, MMMM dd yyyy","ddd, MMM d \"'\"yy","dddd, MMMM dd","M/yy","dd-MM-yy",};

        String date;

      for (int i = 0; i < format.Length; i++)

      {

         date = dt.ToString(format[i], DateTimeFormatInfo.InvariantInfo);

         Console.WriteLine(String.Concat(format[i], " :" , date));

      }

     }

<=======输出=====>

d :07/11/2004  

D :Sunday, 11 July 2004

f :Sunday, 11 July 2004 10:52

F :Sunday, 11 July 2004 10:52:36

g :07/11/2004 10:52

G :07/11/2004 10:52:36

m :July 11

r :Sun, 11 Jul 2004 10:52:36 GMT

s :2004-07-11T10:52:36

t :10:52

T :10:52:36

u :2004-07-11 10:52:36Z

U :Sunday, 11 July 2004 02:52:36

y :2004 July

dddd, MMMM dd yyyy :Sunday, July 11 2004

ddd, MMM d "'"yy :Sun, Jul 11 '04

dddd, MMMM dd :Sunday, July 11

M/yy :7/04

dd-MM-yy :11-07-04

字符串格式化

// Format()

 string s=string.Format("我今年{0}岁}",20);//s="我今年20岁"

格式化枚举

enum classmen

{

  ynn=1,

  yly=2,

  css=3,

  C++=4

}

获取枚举字符串信息如下:

classmen myclassmen=classmen.yly;

Console.WriteLine(myclassmen.ToString( ));   //displays yly

Console.WriteLine(myclassmen.ToString("d")); //displays 2

从系统枚举中获取文本人信息如下:

DayOfWeek day=DayOfWeek.Friday;

Console.WriteLine(String.Format("Day is {0:G}",day));

//displays "Day is Friday"

//格式化字符串“ G ”把枚举显示为一个字符串。

 注意:使用string类时,表面来看能够修改字符串的所有方法实际上并不能修改,实际上它们返回一个根据所调用的方法修改的新的string对象,

如果要修改string字符串的实际内容,可以使用StringBuilder类。比如定义一个字符串变量,这个字符串变量随后会追加或更改内容时,就要用StringBuilder类来创建对象。

StringBuilder方法

参数设置

  public StringBuilder();

  public StringBuilder(int capacity);

  public StringBuilder(string value);

  public StringBuilder(int capacity,int maxCapacity);

  public StringBuilder(string value,int capacity);

 public StringBuilder(string value,int startIndex,int length,int capacity);

   //capacity: StringBuilder对象的建议起止大小

   //value:字符串,包含用于初始化StringBuilder对象的子字符串

   //maxCapacity:当前字符串可包含的最大字符数

   //startIndex:起始位置

   //length:字符串中的字符数

Append 方法

 

可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。

AppendFormat 方法

将文本添加到 StringBuilder 的结尾处,而且实现了 IFormattable 接口,因此可接受格式化部分中描述的标准格式字符串。

Insert 方法

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

Remove 方法

使用 Remove 方法从当前 StringBuilder 中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。

Replace 方法

使用 Replace 方法,可以用另一个指定的字符来替换 StringBuilder 对象内的字符。


参考:

https://www.cnblogs.com/heyuwen/p/HYW2216297280.html

https://www.cnblogs.com/oralig/p/7688469.html

https://cnblogs.com/lql6/p/7699042.html

posted @ 2019-09-08 14:18  PaulTsao  阅读(703)  评论(0编辑  收藏  举报