字符串

字符串是直接从 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 None.gif              string  s  =   " Hello C# " ;
 2 None.gif
 3 None.gif             foreach  ( char  c  in  s) // string中的每个元素都是char
 4 ExpandedBlockStart.gifContractedBlock.gif              dot.gif {
 5InBlock.gif                System.Console.WriteLine(c);
 6ExpandedBlockEnd.gif            }

 7 None.gif
 8 None.gif             for  ( int  i  =   0 ; i  <=  s.Length  -   1 ;i ++  ) // string就是一个char数组
 9 ExpandedBlockStart.gifContractedBlock.gif              dot.gif {
10InBlock.gif                System.Console.WriteLine(s[i]);
11ExpandedBlockEnd.gif            }

  很多同学对indexof这个方法总感觉莫名其妙,不知道indexof有什么用。indexof有很多地方可以使用。
现看一下indexof的表现
1 None.gif              string  s  =   " Hello C# " ;
2 None.gif
3 None.gif             // 仅仅是查找的方向不一样,字符的位置总是从0开始计算
4 None.gif             System.Console.WriteLine(s.IndexOf( ' l ' )); // 2,第3个字符,从前面数第一个l
5 None.gif             System.Console.WriteLine(s.LastIndexOf( ' l ' )); // 3,第4个字符,从后面数第一个l

那indexof和lastindexof有什么具体的作用呢?
 1 None.gif              string  s  =   " -12.23 " ;
 2 None.gif
 3 None.gif             if (s.IndexOf( ' . ' ) != s.LastIndexOf( ' . ' ))
 4 ExpandedBlockStart.gifContractedBlock.gif             dot.gif {
 5InBlock.gif                System.Console.WriteLine("小数点不止一个,错误");
 6ExpandedBlockEnd.gif            }

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

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

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

 1 None.gif              string  s  =   " hello " ;
 2 None.gif
 3 None.gif             // indexof
 4 None.gif              for  ( int  i  =   0 ; i  <=  s.Length  -   1 ;i ++  )
 5 ExpandedBlockStart.gifContractedBlock.gif             dot.gif {
 6InBlock.gif                if(s[i]=='l')
 7ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 8InBlock.gif                    System.Console.WriteLine("indexof={0}",i);
 9InBlock.gif                    break;
10ExpandedSubBlockEnd.gif                }

11ExpandedBlockEnd.gif            }

12 None.gif
13 None.gif           //lastindexof
14 None.gif             for  ( int  i  =  s.Length - 1 ; i  >= 0 ; i -- )
15 ExpandedBlockStart.gifContractedBlock.gif             dot.gif {
16InBlock.gif                if (s[i] == 'l')
17ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
18InBlock.gif                    System.Console.WriteLine("lastindexof={0}", i);
19InBlock.gif                    break;
20ExpandedSubBlockEnd.gif                }

21ExpandedBlockEnd.gif            }



我们来个练习巩固一下

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

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

14InBlock.gif                else
15ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
16InBlock.gif                    if (punctuation.IndexOf(c[i]) >= 0)
17ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
18InBlock.gif                        pi++
19ExpandedSubBlockEnd.gif                    }

20InBlock.gif                    else
21ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif
22InBlock.gif                        ci++
23ExpandedSubBlockEnd.gif                    }

24ExpandedSubBlockEnd.gif                }

25ExpandedBlockEnd.gif            }

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


当然,我们可以用char的静态方法来优化上面的代码
 1 None.gif              char [] c  =   " 我们使用Microsoft Visual Studio .NET 2003 C#开发新一代的应用程序 " .ToCharArray();
 2 None.gif             int  li  =   0 ; // 英文字符个数
 3 None.gif              int  pi  =   0 ; // 标点符号个数
 4 None.gif              int  ci  =   0 ; // 其他字符个数
 5 None.gif
 6 None.gif             for  ( int  i  =   0 ; i  <=  c.Length  -   1 ; i ++ )
 7 ExpandedBlockStart.gifContractedBlock.gif             dot.gif {
 8InBlock.gif                if (char.IsUpper(c[i]) || char.IsLower(c[i]))
 9ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
10InBlock.gif                    li++;
11ExpandedSubBlockEnd.gif                }

12InBlock.gif                else
13ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
14InBlock.gif                    if (char.IsPunctuation(c[i]))
15ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
16InBlock.gif                        pi++;
17ExpandedSubBlockEnd.gif                    }

18InBlock.gif                    else
19ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
20InBlock.gif                        ci++; ;
21ExpandedSubBlockEnd.gif                    }

22ExpandedSubBlockEnd.gif                }

23ExpandedBlockEnd.gif            }

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

spilt是非常有用的方法

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

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

转载于:https://www.cnblogs.com/shyleoking/archive/2007/01/31/635466.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值