字符串

字符串是直接从 object 继承的密封类类型。不可以被继承,表示 Unicode 字符串。
前面我们还了解了可以使用@表示禁止转义。

字符串常用属性

Length 返回字符串长度
Chars 指定字符位置的字符


字符串常用方法

IndexOf
IndexOfAny 
LastIndexOf
LastIndexOfAny

字符的索引
Insert 指定索引位置插入一个指定的 String 实例
Remove 从此实例中的指定位置开始删除指定数目的字符
PadLeft 
PadRight
使用空格或指定的字符填充
Replace 使用新的字符替换原有的字符
Split 按指定的分隔符将字符串转为数组
Substring 查询子串
ToCharArray 将字符串转为字符数组
ToLower 
ToUpper
大小写转换
IsNullOrEmpty 是空还是非空字符串
Trim 
TrimEnd 
TrimStart
去除空格或指定字符

string的本质是char的数组描述形式,可以通过以下的代码来证实
 

1字符串 string s = "Hello C#";
2字符串
3字符串 foreach (char c in s)//string中的每个元素都是char
4字符串 {
5字符串 System.Console.WriteLine(c);
6字符串 }

7字符串
8字符串 for (int i = 0; i <= s.Length - 1;i++ )//string就是一个char数组
9字符串 {
10字符串 System.Console.WriteLine(s[i]);
11字符串 }


很多同学对indexof这个方法总感觉莫名其妙,不知道indexof有什么用。indexof有很多地方可以使用。
现看一下indexof的表现
 

1字符串 string s = "Hello C#";
2字符串
3字符串 //仅仅是查找的方向不一样,字符的位置总是从0开始计算
4字符串 System.Console.WriteLine(s.IndexOf('l'));//2,第3个字符,从前面数第一个l
5字符串 System.Console.WriteLine(s.LastIndexOf('l'));//3,第4个字符,从后面数第一个l


那indexof和lastindexof有什么具体的作用呢?
 

1字符串 string s = "-12.23";
2字符串
3字符串 if(s.IndexOf('.')!=s.LastIndexOf('.'))
4字符串 {
5字符串 System.Console.WriteLine("小数点不止一个,错误");
6字符串 }

7字符串
8字符串
9字符串 if(s.LastIndexOf('-')>0)
10字符串 {
11字符串 System.Console.WriteLine("符号不止一个或符号不在第一位,错误");
12字符串 }

13字符串
14字符串
15字符串 if (s.LastIndexOf('.'- s.LastIndexOf('-')==1)
16字符串 {
17字符串 System.Console.WriteLine("小数点在符号直接后面,错误");
18字符串 }


其实indexof和lastindexof的处理大致如下

 

1字符串 string s = "hello";
2字符串
3字符串 //indexof
4字符串 for (int i = 0; i <= s.Length - 1;i++ )
5字符串 {
6字符串 if(s[i]=='l')
7字符串 {
8字符串 System.Console.WriteLine("indexof={0}",i);
9字符串 break;
10字符串 }

11字符串 }

12字符串
13字符串 //lastindexof
14字符串 for (int i = s.Length-1; i >=0; i--)
15字符串 {
16字符串 if (s[i] == 'l')
17字符串 {
18字符串 System.Console.WriteLine("lastindexof={0}", i);
19字符串 break;
20字符串 }

21字符串 }




我们来个练习巩固一下

声明一个字符串,且赋值” 我们使用Microsoft Visual Studio .NET 2005 C#开发新一代的应用程序”。
输出 英文字符的个数
输出 标点符号的个数
输出 剩余其他字符的个数

 

1字符串 char[] c = "我们使用Microsoft Visual Studio .NET 2003 C#开发新一代的应用程序".ToCharArray();
2字符串 string letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
3字符串 letter += letter.ToLower();
4字符串 string punctuation = @"~!@#$%^&*()_+|`-=/[]{};':<>?,./";
5字符串 int li = 0;//英文字符个数
6字符串 int pi = 0;//标点符号个数
7字符串 int ci = 0;//其他字符个数
8字符串 for (int i = 0; i <= c.Length - 1; i++)
9字符串 {
10字符串 if (letter.IndexOf(c[i]) >= 0)
11字符串 
12字符串 li++
13字符串 }

14字符串 else
15字符串 {
16字符串 if (punctuation.IndexOf(c[i]) >= 0)
17字符串 {
18字符串 pi++
19字符串 }

20字符串 else
21字符串 
22字符串 ci++
23字符串 }

24字符串 }

25字符串 }

26字符串 System.Console.WriteLine("总字符个数:{0}", c.Length);
27字符串 System.Console.WriteLine("英文字符个数:{0}标点符号个数:{1}其他字符个数:{2}合计:{3}",
28字符串 li, pi, ci, li + pi + ci);



当然,我们可以用char的静态方法来优化上面的代码
 

1字符串 char[] c = "我们使用Microsoft Visual Studio .NET 2003 C#开发新一代的应用程序".ToCharArray();
2字符串 int li = 0;//英文字符个数
3字符串 int pi = 0;//标点符号个数
4字符串 int ci = 0;//其他字符个数
5字符串
6字符串 for (int i = 0; i <= c.Length - 1; i++)
7字符串 {
8字符串 if (char.IsUpper(c[i]) || char.IsLower(c[i]))
9字符串 {
10字符串 li++;
11字符串 }

12字符串 else
13字符串 {
14字符串 if (char.IsPunctuation(c[i]))
15字符串 {
16字符串 pi++;
17字符串 }

18字符串 else
19字符串 {
20字符串 ci++; ;
21字符串 }

22字符串 }

23字符串 }

24字符串 System.Console.WriteLine("{0}--{1},{2},{3}:{4}", li + pi + ci, li, pi, ci, c.Length);


spilt是非常有用的方法

 

1字符串 string dir = @"C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/AppLaunch.exe";
2字符串
3字符串
4字符串 //不使用Split的繁琐代码
5字符串
6字符串 int star = 0;
7字符串 int end = dir.IndexOf('//', star);
8字符串
9字符串 do
10字符串 {
11字符串 System.Console.WriteLine(dir.Substring(star, end - star));
12字符串 star = end + 1;
13字符串 end = dir.IndexOf('//', star);
14字符串 }
 while (end > -1);
15字符串 System.Console.WriteLine(dir.Substring(star));
16字符串
17字符串
18字符串 //不使用Split的优雅代码
19字符串 string[] dirs = dir.Split('//');
20字符串 foreach (string d in dirs)
21字符串 {
22字符串 System.Console.WriteLine(d);
23字符串 }

24字符串
25字符串 //直接定位文件
26字符串 System.Console.WriteLine(dir.Split('//')[dir.Split('//').Length - 1]);

 



本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806907

上一篇:CES Asia专题|中国移动发布全球最小通信模组,助力物联网发展


下一篇:建立容器服务的分批发布功能