C#中字符与字符串(转)
Char类是C#提供的字符类型,String是C#提供的字符串类型。
字符:
Char类在C#中表示一个Unicode字符。
Char类只定义一个Unicode字符。
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提供了非常多的实用方法,其中以Is和To开头的比较重要。以Is开头的方法大多是判断Unicode字符是否为某个类别,以To开头的方法主要是转换为其他Unicode字符。
转义字符
C#采用字符“\”作为转义字符。例如,定义一个字符,而这个字符是单引号,如果不使用转义字符,则会产生错误。
转义字符就相当于一个电源变换器,电源变换器就是通过一定的手段获得所需的电源形式,例如交流变成直流、高电压变为低电压、低频变为高频等。转义字符也是,它是将字符转换成另一种操作形式,或是将无法一起使用的字符进行组合。
注意:
转义符\(单个反斜杠)只针对后面紧跟着的单个字符进行操作。
1 static void Main(string[] args) 2 3 { 4 5 char a = 'a'; //声明字符a 6 7 char b = '8'; //声明字符b 8 9 char c = 'L'; //声明字符c 10 11 char d = '.'; //声明字符d 12 13 char e = '|'; //声明字符e 14 15 char f = ' '; //声明字符f 16 17 //使用IsLetter方法判断a是否为字母 18 19 Console.WriteLine("IsLetter方法判断a是否为字母:{0}", Char.IsLetter(a)); 20 21 //使用IsDigit方法判断b是否为数字 22 23 Console.WriteLine("IsDigit方法判断b是否为数字:{0}", Char.IsDigit(b)); 24 25 //使用IsLetterOrDigit方法判断c是否为字母或数字 26 27 Console.WriteLine("IsLetterOrDigit方法判断c是否为字母或数字:{0}", Char.IsLetterOrDigit(c)); 28 29 //使用IsLower方法判断a是否为小写字母 30 31 Console.WriteLine("IsLower方法判断a是否为小写字母:{0}", Char.IsLower(a)); 32 33 //使用IsUpper方法判断c是否为大写字母 34 35 Console.WriteLine("IsUpper方法判断c是否为大写字母:{0}", Char.IsUpper(c)); 36 37 //使用IsPunctuation方法判断d是否为标点符号 38 39 Console.WriteLine("IsPunctuation方法判断d是否为标点符号:{0}", Char.IsPunctuation(d)); 40 41 //使用IsSeparator方法判断e是否为分隔符 42 43 Console.WriteLine("IsSeparator方法判断e是否为分隔符:{0}", Char.IsSeparator(e)); 44 45 //使用IsWhiteSpace方法判断f是否为空白 46 47 Console.WriteLine("IsWhiteSpace方法判断f是否为空白:{0}", Char.IsWhiteSpace(f)); 48 49 Console.ReadLine(); 50 51 }
说明:大多数重要的正则表达式语言运算符都是非转义的单个字符。转义符\(单个反斜杠)通知正则表达式分析器反斜杠后面的字符不是运算符。例如,分析器将r视为字符,而将后跟r的反斜杠(\r)视为回车功能。
为了避免转义序列元素转义,可以通过以下两种方式避免。
1、 通过@符实现。
2、 通过逐字指定字符串字面值(两个反斜杠)实现。
字符串:
首先理解string,String,StringBuilder的概念和区别:
string
string,msdn给出的解释就是,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对象相关的系统开销可能会非常昂贵。
String与string的区别:
string 是 .NET Framework 中 String 的别名,string是C#基元类型(primitive),简单来说就是编译器直接支持的数据类型。基元类型要直接映射到Framework类库(FCL)中的类型,例如,C#中一个基元类型int直接映射到System.Int32类型,这里int是基元类型,System.Int32是FCL类型。而String是FCL类型的,所以在C#的编译时,会自动的把string转化为System.String。所以string与String实质上没什么区别,只是在使用string要做一次转换,转换为String。因此,在编码时我们推荐使用String。
string虽然为引用类型,但是(== 和 !=)是为了比较 string 对象(而不是引用)的值。
概述:
使用string类时,表面来看能够修改字符串的所有方法实际上并不能修改,实际上它们返回一个根据所调用的方法修改的新的string对象,如果要修改string字符串的实际内容,可以使用StringBuilder类。
各种字符串操作方法:
- 比较:
(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)
2.格式化字符串
public static string Format(string format,object obj)
format:指定的格式
obj:被格式化的对象
格式字符 |
关联属性/说明 |
d |
ShortDatePattern |
D |
LongDatePattern |
f |
完整日期和时间(长日期和短时间) |
F |
FullDateTimePattern(长日期和长时间) |
g |
常规(短日期和短时间) |
G |
常规(短日期和长时间) |
m、M |
MonthDayPattern |
r、R |
FC1123Pattern |
s |
使用当地时间的 |
t |
ShortTimePattern |
T |
LongTimePattern |
u |
UniversalSortableDateTimePattern |
U |
使用通用时间的完整日期和时间(长日期和长时间) |
y、Y |
YearMonthPattern |
3.截取字符串
public string Substring(int startIndex,int length)
startIndex:子字符串起始位置的索引
length:子字符串中的字符数
4.分割字符串
public string[] split(params char[] separator);
separator:一个数组包含分隔符
返回值:一个数组,其元素包含此实例中的子字符串,这些字符串由separator中的一个或多个字符分隔。
5.插入和填充字符串
插入字符串:
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 Replace(char Ochar,char NChar);
public string Replace(string Ovalue,string NValue);
Ochar:待替换的字符
Nchar替换后的新字符
删除字符串:
public string Remove(int startIndex);
public string Remove (int startIndex,int count);
可变字符串:
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:字符串中的字符数
1、 Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。
2、 AppendFormat 方法将文本添加到 StringBuilder 的结尾处,而且实现了 IFormattable 接口,因此可接受格式化部分中描述的标准格式字符串。
3、 Insert 方法将字符串或对象添加到当前 StringBuilder 中的指定位置。
4、 可以使用 Remove 方法从当前 StringBuilder 中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。
5、 使用 Replace 方法,可以用另一个指定的字符来替换 StringBuilder 对象内的字符。