19. 字符与字符串
一、字符的定义
1、char字符: 可容纳单个字符的一种基本数据类型(数值类型)。
char类常用方法:
IsLetter 判断是否是字母;
IsDigit 判断是否是数字;
IsLetterOrDigit 判断是否是数字或字母;
IsLower 判断是否小写;
IsUpper 判断是否大写;
IsPunctuation 判断是否标点;
IsSeparator 判断是否分隔符;
IsWhiteSpace 判断是否空格;
ToLower 转化为小写;
ToUpper 转化为大写。
例:定义三个字符(小写字母、数字、大写字母),并初始化判断第一个是否为字母,如果是转化为大写;判断第二个是否为数字,将第三个转化为小写。
1 char mychar1 = 'b'; 2 char mychar2 = '2'; 3 char mychar3 = 'G'; 4 if (char.IsLetter(mychar1)) 5 Console.WriteLine(char.ToUpper(mychar1)); 6 if (char.IsDigit (mychar2)) 7 Console.WriteLine("第二个字符为数字"); 8 9 //转换为小写赋给a输出,也可以写成 Console.WriteLine(char.ToLower(mychar3)); 10 char a =char.ToLower(mychar3); 11 Console.WriteLine(a ); 12 Console.ReadKey();
2、string字符串:由零个或多个字符组成的有限序列(引用类型)
字符串的创建:字符串的创建,CLR(公共语言运行库)会先检查是否有相同的字符串,如果有,会享用共同的内存地址。
3、字符集(charset):是一个系统支持的所有抽象字符的集合(如 ASCII 字符集、Unicode 字符集等)
字符编码(character encoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他的一个集合(如号码或电脉冲)进行配对。
二、字符与字符串的应用
1、字符串的比较
方法1:Equals 方法:
Equals(等于)方法,该方法返回一个bool值,相等即 true 不相等即 false;
格式:string.Equals(字符串1,字符串2) 返回的是布尔值。
方法2:Compare 方法
格式:string.Compare(字符串1,字符串2)
方法3: CompareTo 方法
格式:字符串1.CompareTo (字符串2)
方法4:==:如果比较的是值类型,则比较两个值的大小;如果是比较的是引用类型,则比较的是内存地址。
注意:虽然字符串是引用类型,但字符串利用 “==” 间的比较,比较的是字符串的内容,而不是内存地址。就是说只有内容相同,就返回 true。
1 //例: 2 string a = "hello"; 3 string b = "HELLO"; 4 //Equals(等于)方法:返回一个bool值,相等即true不相等即false 5 Console.WriteLine(string.Equals(a, b)); 6 7 //Compare方法:如果a>b则输出1,a=b则输出0,a<b则输出-1。另外26个英文字母越排后越大 8 Console.WriteLine(string.Compare(a,b )); 9 //在字符串后加一个true,则忽略俩个字符串大小写所带来的数值大小的变化(相同字母大写大于小写) 10 Console.WriteLine(string.Compare(a, b, true)); 11 12 //CompareTo方法:如果a>b则输出1,a=b则输出0,a<b则输出-1 13 Console.WriteLine(a.CompareTo(b )); 14 Console.ReadKey();
2、字符串的格式化:即将某种格式的字符转化为另一种格式
(1)格式:string.Format("{对象的序号:要转换的格式}",格式化的对象一,格式化的对象二);
(2)数值格式符的方法:
C 适用于数字类型 转化为专用场合的货币值;
D 适用于整数类型 一般整数;
E 适用于数字类型 科学计数法;
F 适用于数字类型 小数点后的位数固定(默认为两位);
G 适用于数字类型 一般整数;
N 适用于数字类型 通用场合数字格式(如:3,100.00);
P 适用于数字类型 百分数;
X 适用于整数类型 十六进制格式。
1 //例:输出001-050 2 for (int i=0;i < 51; i++) 3 { 4 string mystr = string.Format("{0:d3}", i); 5 Console.WriteLine(mystr); 6 } 7 Console.ReadKey();
1 //例2 2 //指定字符串中的一个或多个格式项换为指定对象的 字符串表示形式 3 string strResult = string.Format("同学{0},大家{1}好", "们", "非常"); 4 Console.WriteLine("结果为:"+strResult); 5 Console.ReadKey();
3、字符串的截取(也是一种重载方法)
(1)格式1:字符串.Substring(整数n); //从第(n+1)个字符串开始截取后面的字符串,即将字符串前n个长度的字符串删掉;
(2)格式2:字符串.Substring(整数n,整数m) //从第(n+1)个字符串开始截取m个字符串。n是索引。
1 //例:输出一个字符串,首字母大写 2 Console.WriteLine("请输入一个英文单词,不区分大小写:"); 3 string mystr = Console.ReadLine(); 4 string fist1 = mystr.Substring(0, 1).ToUpper(); 5 string other = mystr.Substring(1).ToLower(); 6 Console.WriteLine(fist1 + other); 7 Console.ReadKey();
4、字符串的分割:把字符串以某个字符为分隔符分成一个数组。分割以后返回值是一个字符串数组。
格式:字符串.Split(字符或字符数组); //分割以后括号中的字符或字符数组就被删掉了
1 //例: 2 string mystr = "511314-wan-C#=字符串数组"; 3 Console.WriteLine("原字符串为"+mystr); 4 //string[] changeMystr = mystr.Split('-'); //一个字符的分割方法 5 string[] changeMystr = mystr.Split(new char[] { '-', '=' }); //两个字符的分割方法 6 foreach (string outstr in changeMystr) Console.Write(outstr+"\t"); 7 Console.ReadKey();
5、字符串的合并(累加)
方法1:+
即新字符串 = 字符串1 + 字符串2 ;
方法2: Concat
string.Concat(字符串1,字符串2,...,字符串n) ;
方法3:Join
string.Join("合并后的分隔符",字符串1,字符串2,。。。,字符串n);
或string.Join("合并后的分隔符",字符串数组);
1 static void Main(string[] args) 2 { 3 string a = "520"; 4 string b = "C#"; 5 string c = "我爱你"; 6 string changeMystr = a + b + c; //第一种方法 7 Console.WriteLine(changeMystr); 8 9 string changeMystr1 = string.Concat(a, b, c); //第二种方法 10 Console.WriteLine(changeMystr1); 11 12 string changeMystr2 = string.Join("-", a, b, c);//第三种方法 13 Console.WriteLine(changeMystr2); 14 15 string[] f = { "a", "b", "c" }; 16 string changeMystr3 = string.Join("-", f); //输出结果为:a-b-c 17 Console.WriteLine(changeMystr3); 18 Console.ReadKey(); 19 }
6、字符串的插入与填充:
插入某个位置,那个位置及后面的数则往后推。填充的目的是使该字符串达到指定的长度。
插入格式:要插入的字符串.Insert(插入位置,"插入子串");
填充格式:
(1)要填充的字符串.PadRight(总长度); //以空格填充;
(2)要填充的字符串.PadRight(总长度,'要填充的字符');
1 static void Main(string[] args) 2 { 3 string mystr1 = "52liu hang wei"; 4 //字符串的插入 5 string changeMystr = mystr1.Insert(6, "c") + "\n" + mystr1.Insert(0, "bb "); 6 Console.WriteLine(changeMystr); 7 8 string mystr2 = "520"; 9 string changeMystr1 = mystr2.PadLeft(6); //在字符串的左边填充达到指定的总长度 10 Console.WriteLine(changeMystr1); 11 12 string changeMystr2 = mystr2.PadRight(6, '/');//在字符串的结尾处添加指定字符以达到指定的总长度 13 Console.WriteLine(changeMystr2); 14 Console.ReadKey(); 15 }
7、字符串的删除
格式:字符串.Remove(开始位置); //开始位置是是字符串的索引
字符串.Remove(开始位置,移除数量);
1 //例: 2 string mystr = "my name is liu chang wei !5201314//3344"; 3 string changMystr = mystr.Remove(24); //从25位开始移除,含25位 4 Console.WriteLine(changMystr); 5 6 string mystr1 = "my 520name is liu"; 7 string changeMystr1 = mystr1.Remove(3, 3);//从第4位开始移除,移除三位 8 Console.WriteLine(changeMystr1); 9 Console.ReadKey();
8、字符串的修剪 Trim
1 static void Main(string[] args) 2 { 3 string mystr = " ##@@ //www.changwei.com $$%#%# "; 4 Console.WriteLine(mystr.Trim() + "|"); //修剪字符串头部跟尾部的空格符 5 Console.WriteLine(mystr.TrimStart() + "|"); //修剪开头的空格符 6 Console.WriteLine(mystr.TrimEnd() + "|"); //修剪结尾处的空格符 7 Console.WriteLine(mystr.Trim('#', ' ')); //修剪头尾的空格符及#号, 8 //当要修剪的字符被其他字符隔开则无法修剪 9 Console.WriteLine(mystr.Trim("# ".ToCharArray()));//效果与前一种方法相同 10 Console.ReadKey(); 11 }
9、字符串的复制
格式:string.Copy(要复制的字符串);
变量名.CopyTo(要复制字符的起始位置,目标字符数组,目标数组中开始存放的位置,要复制的字符个数);
1 static void Main(string[] args) 2 { 3 string mystr = "http://www.changwei.com"; 4 string copyMystr = string.Copy(mystr); //使用静态方法复制 5 Console.WriteLine(copyMystr); 6 7 char[] mycharArray = new char[20]; //声明数组,把20个字符的存储空间赋给mycharArray 8 mystr.CopyTo(2, mycharArray, 1, 8); //从第2位开始复制,存储位置从1开始存放,存放8个字符到mycharArray中 9 Console.WriteLine(mycharArray); 10 Console.ReadKey(); 11 }
10、字符串的替换
格式:字符串.Replace('要替换的原字符','替换后的字符');
1 //例: 2 string mystr = "www.chang wei !"; 3 Console.WriteLine(mystr.Replace('w','g')); 4 Console.ReadKey();
11、 字符串的查找
格式:字符串.IndexOf(要查找的字符或字符串); //返回第一次出现要查找字符串的位置
字符串.LastIndexOf(要查找的字符或字符串);//返回最后一次出现要查找字符串的位置
注意:如果所要查找的字符串内不包含要查找的字符或字符串则返回一个负数(-1)
1 //例: 2 //string mystr = "djfk520ljsdjf520hjds"; 3 //int returnVal1 = mystr.IndexOf("520"); 4 //int returnVal2 = mystr.LastIndexOf("520"); 5 //Console.WriteLine("{0}\n{1}",returnVal1,returnVal2); 6 7 Console.WriteLine("请输入一个字符串,判段是否包含520及他出现第一次和最后一次的位置"); 8 9 while (true) //可以使用for(;;)来代替 10 { 11 string mystr = Console.ReadLine(); 12 int returnVal1 = mystr.IndexOf("520"); 13 int returnVal2 = mystr.LastIndexOf("520"); 14 if (returnVal1 < 0) 15 { 16 Console.WriteLine("该字符串不包含520,请重新输入:"); 17 } 18 else Console.WriteLine("{0} {1}\n您可以重新输入:", returnVal1, returnVal2); 19 }