对字符和字符串的一些总结
- 字符
字符的定义非常简单:
char ch='L';
char类的常用方法和说明:
转义字符的使用:
char a = '\'';
C#中常用的转移字符及说明:
- 字符串
比较字符串
1)Compare方法
Compare方法用来比较两个字符串是否相等,它有很多重载方法,其中最常用的两种形式如下:
int Compare(string strA, string strB) int Compare(string strA, string strB, bool ignorCase)
ignore的值若是true,那么在比较字符串的时候就会忽略大小写的区别。
返回值是一个32位有符号整数,指示两个比较数之前的词法关系。(0表示相同)
string.Compare(str1, str2);
比较字符串并不是比较字符串长度的大小,而是比较字符串在英文字典中的位置。按照字典的排序规则,判断两个字符串的大小,在英文字典中前面的单词小于后面的单词。
2)CompareTo方法
CompareTo与Compare方法类似,都可以比较两个字符串是否相等,不同的是CompareTo方法以实例本身与指定的字符串比较,其语法如下:
public int CompareTo(string strB)
strB表示与此字符串相比较的字符串
返回值与Compare相同。
3)Equals方法
有两种用法:
str1.Equals(str2); string.Equals(str1, str2);
返回值为bool.
格式化字符串
在C#中,string类提供了一个静态的Format方法,用于将字符串数据格式化成指定的格式,语法格式如下:
public static string Format(string foramt, object obj);
用法:
string newstr = String.Format("{0} And {1} are friends",str1,str2);
另外C#提供了一种用于日期时间的格式规范:
示例:
DateTime dt = DateTime.Now; string strDate = string.Format("{0:D}", dt); Console.WriteLine(strDate);
String.Format的多格式定义:(内容来自:https://www.ezloo.com/2008/11/string_format.html)
这里所谓的多格式是指一个格式项中可以定义1~3个格式参数,每种格式参数用分号(;)隔开。带2个和3个格式参数的格式项所对应的值必须是数值类型的,这样才能判断是否为负数、正数、零。
带1个格式参数:
//以科学计数法的格式输出
double p1 = 1000000;
Response.Write(String.Format("{0:E2}", p1));
带2个格式参数:
/*当格式项对应的值为非负数,则选择第一种格式;值为负数则选第二种格式*/
double p1 = 10000;
double p2 = -2420.50;
Response.Write(String.Format("{0:#,###0.00;#,###0.000;}<BR>", p1));
Response.Write(String.Format("{0:#,###0.00;#,###0.000;}", p2));
带3个格式参数:
/*当格式项对应的值为正数则选择第一张格式;
负数则为第二中格式;
值等于零则为第三种格式*/
1double p1 = 10000;
double p2 = -2420.50;
double p3 = 0.00;
Response.Write(String.Format("{0:#,###0.00;#,###0.000;#,###0.0000}<BR>", p1));
Response.Write(String.Format("{0:#,###0.00;#,###0.000;#,###0.0000}<BR>", p3));
Response.Write(String.Format("{0:#,###0.00;#,###0.000;#,###0.0000}", p2));
补充:
{0:N2} 中的N3,f3表示格式化之后数据的类型以及小数的位数。如:N2表示带2个小数的数字;
与此类似:
N或者n 表示 数字
F或者f 表示 固定点
E或者e 表示 科学计数法
D或者d 表示 十进制数
X或者x 表示 十六进制
G或者g 表示 常规
C或者c 表示 货币
截取字符串
string str2 = str1.Substring(0, 1);
分割字符串
string[] strNews = strOld.Split(',');
插入和填充字符串
插入和填充字符串分别用到string类中的Insert方法和PadLeft/PadRight方法。
1)插入字符串
string str2 = str1.Insert(0, "C");
2)填充字符串(在字符串的左右侧进行字符填充)
以PadLeft方法为例,语法格式如下:
public string PadLeft(int totalWidth, char paddingChar);
totalWidth表示结果字符串中的字符数。
string str3 = str1.PadLeft(str1.Length + 1, '0');
复制字符串
1)Cpoy
和‘=’一样啊
string str2 = string.Copy(str1);
2)CopyTo
这个详细点,语法格式:
public void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count);
sourceIndex:需要复制的起始位置
destination:目标字符数组
destinationIndex:目标数组开始存放的位置
count:指定要复制的字符的个数
string str1 = "123456"; char[] myChar = new char[5]; str1.CopyTo(1, myChar, 0, 5); Console.WriteLine(myChar);
替换字符串Replace
语法格式:
public string Replace(char Ochar,char NChar) public string Replace(string OValue,string NValue)
O待替换的,N替换后的新的
demo:
string oldstr = "Hello Girl!"; string Ostr = "Girl"; string Nstr = "Boy"; string newstr = oldstr.Replace(Ostr, Nstr); Console.WriteLine(newstr); Console.Read();
result:
删除字符串Remove
语法格式
public string Remove(int StartIndex); public string Remove(int StratIndex, int count);
demo
string str1 = "Hello Girl!"; string str2 = "Hello Girl!"; string str3 = str1.Remove(5); string str4 = str2.Remove(0, 5); Console.WriteLine(str3); Console.WriteLine(str4); Console.Read();
result:
可变字符串
可变字符串在C#中用 StringBuilder 类表示,它位于 System.Text 命名空间下。之所以说 StringBuilder 对象的值是可变的,是因为在通过追加、移除、替换或插入字符而创建它后可以对它进行修改。
StringBuilder 类的构造函数:
public StringBuilder(); public StringBuilder(int capacity); public StringBuilder(string value); public StringBuilder(string value, int capacity); public StringBuilder(int capacity, int maxCapacity); public StringBuilder(string value, int startIndex, int length, int capacity);
capacity:StringBuilder对象的建议起始大小
value:字符串,包含用于初始化 StringBuilder 对象的子字符串
maxCapacity:当前字符串可包含的最大字符数
stratIndex value:中子字符串开始的位置
length:子字符串中的字符数
StringBuilder SBuilder = new StringBuilder("Hey Girl!");
StringBuilder中的常用方法
demo:
int Num = 18000; StringBuilder SBuilder = new StringBuilder("Hey Girl!",100);//初始化 SBuilder.Append("Be Careful! ");//追加到末尾 Console.WriteLine(SBuilder); SBuilder.AppendFormat("This is cost {0:C}! ", Num);//指定格式追加到末尾 Console.WriteLine(SBuilder); SBuilder.Insert(0, "Leon says: ");//插入 Console.WriteLine(SBuilder); SBuilder.Remove(10, SBuilder.Length - 10);//删除索引10以后的字符串 Console.WriteLine(SBuilder); SBuilder.Replace("Leon", "Sarry");//替换 Console.WriteLine(SBuilder); Console.Read();
String和StingBuilder的区别
string a = "AA" + "BB"; StringBuilder b = new StringBuilder(); b.Append("AA"); b.Append("BB");
上面的代码分别使用string类和StringBuilder类连接字符串,但这两种方法在内存中的操作是不同的,第一种方法在内存中有3个sting 变量(“AA”,"BB","AABB");而第二种方法在内存中操作时只有一个“AABB”变量,所以它们的性能是完全不同的。
当程序中需要大量对某个字符串进行操作时,应该考虑用StingBuilder类处理,避免产生太多的临时对象。当程序只是对某个字符串进行一次或几次操作时,采用string即可。
正则表达式
语法如下:
public static bool IsMatch(string input, string pattern);
demo:
string mail = "xxx@microsoft.com"; if (Regex.IsMatch(mail, @"\w+@\w+\.\w{1,3}")) Console.WriteLine("Correct mail fromat"); else Console.WriteLine("Wrong mail fromat"); Console.Read();