黑马程序员_字符串常用处理方法

一、“改变”字符串

字符串的不可变性,在内存中,字符串一旦生成,将不会改变。如果一定要更改字符串中的某个字符,可以使用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

posted @ 2014-02-23 14:08  dlwcg  阅读(320)  评论(0编辑  收藏  举报