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