黑马程序员_字符串常用处理方法
一、“改变”字符串
字符串的不可变性,在内存中,字符串一旦生成,将不会改变。如果一定要更改字符串中的某个字符,可以使用string.ToCharArray()方法将字符串复制一份,变成一个字符数组,这样就可以更改了。
1 string str = "I have a dream!!!"; 2 char[] charStr=str.ToCharArray(); 3 charStr[0]='Y'; 4 str = new string(charStr); 5 Console.WriteLine(str); 6 Console.ReadKey(true);
输出结果:
Y have a dream!!!
二、分割与合并;截取、插入、替换与移除;
1.分割:将一个字符串用指定的一个或多个字符分割,可以用string[] <strName>.Split(params char[] separator),但是,如果字符串中连续出现多个分隔符,得到的数组中会含有空字符串;这时,我们可以用带有StringSplitOptions options参数的string.Split(char[] separator,StringSplitOptions options),options中的RemoveEmptyEntires为移除结果数组中的空字符串。
string[] <strName>.Split(params char[] separator)和string Split(char[] separator,StringSplitOptions options)中的分隔符可以为字符串。
1 string str = "吃葡萄不吐葡葡萄皮,不吃葡萄倒吐葡萄葡萄皮。"; 2 string[] str1 = str.Split(new char[] { '葡' }); 3 string[] str2 = str.Split(new char[] { '葡', '不' }, StringSplitOptions.RemoveEmptyEntries); 4 string[] str3 = str.Split(new string[] { "葡萄" },StringSplitOptions.None); 5 string[] str4 = str.Split(new string[] { "葡萄", "不" }, StringSplitOptions.RemoveEmptyEntries); 6 Console.ReadKey(true);
输出结果:
str1与str3因为没有启用StringSplitOptions.RemoveEmptyEntries选项,分隔后的数组中含有空字符串。
2.合并:利用string.Join();
1 string str = "I have a dream!!!"; 2 string[] str1 = str.Split(new char[] { ' ' }); //这里的分隔符' ',没有连续出现,可以不用StringSplitOptions.RemoveEmptyEntries选项。 3 str = string.Join(" ", str1); 4 Console.WriteLine(str); 5 Console.ReadKey(true);
输出结果:
I have a dream!!!
3.截取:利用string.Substring();
1 string str = "I have a dream!!!"; 2 string str1 = str.Substring(0,6); 3 string str2 = str.Substring(7); 4 Console.WriteLine("{0}\n{1}\n",str1,str2); 5 Console.ReadKey(true);
输出结果:
I have
a Dream!!!
4.插入:利用string.Insert();
1 string str = "I have a dream!!!"; 2 str = str.Insert(14, ",a song to sing"); 3 Console.WriteLine(str); 4 Console.ReadKey(true);
输出结果:
I have a dream,a song to sing!!!
5.替换:利用string.Replace();
1 string str = "I have a dream!!!"; 2 str = str.Replace("I", "We"); //Replace()中的字符串,也可以换成字符。 3 Console.WriteLine(str); 4 Console.ReadKey(true);
输出结果:
We have a dream!!!
6.移除:利用string.Remove();
1 string str = "I have a dream!!!"; 2 string str1 = str.Remove(14); 3 string str2 = str.Remove(14, 2); 4 Console.WriteLine("{0}\n{1}",str1,str2); 5 Console.ReadKey(true);
输出结果:
I have a dream
I have a dream!
三、检测
1.利用string.Contains();检测是否包含指定字符串。
1 string str = "I have a dream!!!"; 2 string str1 = "have"; //str1也可以为字符。 3 if (str.Contains(str1)) 4 { 5 Console.WriteLine("{0}中包含{1}", str, str1); 6 } 7 else 8 { 9 Console.WriteLine("{0}中不包含{1}", str, str1); 10 } 11 Console.ReadKey(true);
输出结果:
I have a dream!!!中包含have
2.利用string.IndexOf()与string.LastIndexOf()及string.IndexOfAny()与string.LastIndexOfAny()检测指定字符在字符串中的出现位置。
1 // 01234567890123456789 2 string str = "I have a dream!!!"; 3 4 int num = str.IndexOf('e'); 5 Console.WriteLine(num); 6 7 int numL = str.LastIndexOf('e'); //从后往前找 8 Console.WriteLine(numL); 9 //用IndexOfAny()可以匹配字符或字符串数组中的所有字符或字符串,而IndexOf只能匹配一个字符或字符串 10 int numAny = -1; //numAny初始化 11 while (true) 12 { 13 numAny = str.IndexOfAny(new char[] { 'e', 'a' }, numAny + 1); //每找到一处,numAny已经自增了。 14 if (numAny == -1) //当找不到匹配字符的时候,numAny==-1,跳出循环。 15 { 16 break; 17 } 18 Console.Write(numAny + " "); 19 } 20 Console.WriteLine(); 21 22 int numLAny = str.Length; 23 while (true) 24 { 25 numLAny = str.LastIndexOfAny(new char[] { 'e', 'a' }, numLAny - 1); //这里是从后往前找,所以每找到一处,numLAny已经自减了。 26 if (numLAny == -1) 27 { 28 break; 29 } 30 Console.Write(numLAny + " "); 31 } 32 Console.ReadKey(true);
输出结果:
5
11
3 5 7 11 12
12 11 7 5 3
3.利用string.StartsWith()与string.EndsWith()检测是否以指定字符串开头或结尾。
1 string str = "I have a dream!!!"; 2 string start = "I have "; 3 string end = "m!!!"; 4 if (str.StartsWith(start) && str.EndsWith(end)) //StartsWith()与EndsWith()均有三个重载! 5 { 6 Console.WriteLine("{0}是以{1}开头,并且以{2}结尾。", str, start, end); 7 } 8 else 9 { 10 Console.WriteLine("匹配有误!"); 11 } 12 Console.ReadKey(true);
输出结果:
I have a dream!!!是以I have 开头,并且以m!!!结尾。
4.利用string.Trim()、string.TrimStart()、string.TrimEnd()检测字符串前后是否有指定字符并处理,默认为空格。
1 string str = " I have a dream!!! "; 2 Console.WriteLine(str.TrimStart()); 3 Console.WriteLine(str.TrimEnd()); 4 Console.WriteLine(str.Trim()); 5 6 string str1 = "I have a dream!!!"; 7 Console.WriteLine(str1.TrimStart('I',' ','h')); 8 Console.WriteLine(str1.TrimEnd('a','m','!')); 9 Console.WriteLine(str1.Trim('I', '!')); 10 Console.ReadKey(true);
输出结果:
I have a dream!!!
I have a dream!!!
I have a dream!!!
ave a dream!!!
I have a dre
have a dream
四、比较
1.利用string.Equals()比较两个字符串是否具有相同的值,返回类型为bool值。
1 string str = "I have a dream!!!"; 2 string str1 = "i have a dream!!!"; 3 Console.WriteLine(str.Equals(str1, StringComparison.OrdinalIgnoreCase).ToString()); //第二个参数为忽略大小写。 4 Console.WriteLine(str.Equals(str1).ToString()); //一般情况下没有==来的直接。 5 Console.ReadKey(true);
输出结果:
True
False
2.利用string.Compare()用字典排序法比较两个字符串的大小。
1 string str1 = "1.天黑黑"; 2 string str2 = "2.天黑黑"; 3 string str3 = "10.天黑黑"; 4 Console.WriteLine(string.Compare(str1, str2, true)); //-1 这里用的是字典比较法,str1>str2,值为1,str1=str2,值为0,str1<str2,值为-1 5 Console.WriteLine(string.Compare(str2, str3, true)); //1 2>1,所以结果是1 最后一个参数true为忽略大小写,false为不忽略。 6 Console.WriteLine(string.Compare(str3, str1, true)); //1 0的ascii码为48,大于.的ascii码46,所以结果为1 7 Console.ReadKey(true);
输出结果:
-1
1
1