博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

c#中Split分割字符串的几种方法

Posted on 2012-09-03 14:37  oilsun  阅读(481)  评论(0编辑  收藏  举报

c#中Split分割字符串的几种方法

作者:vegas 发布日期:2008.03.21 1,461 views
所属分类:C#

最近经常看到论坛中许多帖子询问如何使用split来分割字符串,我这里对split做一些简单的总结,希望能够对大家有所帮助。下面介绍几种方法:

第一种方法:打开vs.net新建一个控制台项目。然后在Main()方法下输入下面的程序。

string s="abcdeabcdeabcde";string[] sArray=s.Split('c');foreach(string i in sArray)Console.WriteLine(i.ToString());

输出下面的结果:ab

deab

deab

de

我们看到了结果是以一个指定的字符进行的分割。如果我们希望使用多个字符进行分割如c,d,e如何做呢?好,我们使用另一种构造方法:

string s="abcdeabcdeabcde

     string[] sArray1=s.Split(new char[3]{'c','d','e'});
        

foreach(string i in sArray1)
        Console.WriteLine(i.ToString());

可以输出下面的结果:ab

ab

ab

除了以上的这两种方法以外,第三种方法是使用正则表达式。新建一个控制台项目。然后先添加 using System.Text.RegularExpressions;

Main() :中更改为

System.Text.RegularExpressionsstring content="agcsmallmacsmallgggsmallytx";string[]resultString=Regex.Split(content,"small",RegexOptions.IgnoreCase)foreach(string i in resultString)Console.WriteLine(i.ToString());

输出下面的结果:agc
mac
ggg
ytx
使用正则表达式有什么好处呢? 别着急,后面我们会看到它的独特之处。

下面介绍第4种方法。比如

string str1="我*****是*****一*****个*****教*****师";

如果我希望显示为:我是一个教师, ,如何作呢? 我们可以使用下面代码:

string str1="我*****是*****一*****个*****教*****师;

       string[] str2;
       str1

=str1.Replace("*****","*");
       str2

=str1.Split('*');
      

foreach(string i in str2)
       Console.WriteLine(i.ToString()); 

这样也可以得到正确结果。但是比如

string str1="我**是*****一*****个*****教*****师";

我希望显示的结果为:我是一个教师。

我如果采用上面的第四种方法来做就会产生下面的错误:我 是一个教师

中间有空格输出,所以输出结果并不是我希望的结果,如何解决呢?这就又回到了正则表达式了(这里可以看到它的功能强大之处),这时可以采用下面的第五种方法:

string str1="我**是*****一*****个*****教*****师";string[] str2 =System.Text.RegularExpressions.Regex.Split(str1,@"[*]+");foreach(string i in str2)Console.WriteLine(i.ToString());

这里通过"[*]+" 巧妙的完成了我们的目标。

 

//c#中Split用法总结

首先想想说说的是,对于同行来说,这些小知识点,或许是已经很熟悉了,大有没发博文之必要;但是个人觉得:知识这个东西,需要不断的总结,温 故而知新比较好.最近一段时间,本人想系统总结一些东西,即将陆陆续续的呈现出来,对大家有帮助的可以看看,没帮助的也无所谓.相信在今后一系列的总结当 中,会找到你感兴趣的东西.

Split用法总结如下:
1.单个字符的分割:
string s=abcdeabcdeabcde;
string[] sArray=s.Split(c) ;
foreach(string i in sArray) 
Console.WriteLine(i.ToString());
输出下面的结果:
ab
deab
deab
de
2.对于多个字符的分割,使用一种构造方法:
string s=abcdeabcdeabcde;
string[] sArray=s.Split(new char(3){c,d,e}) ;
foreach(string i in sArray) 
Console.WriteLine(i.ToString());
输出下面的结果:
ab
ab
ab
需要在这里提示说明一下的是:构造函数new char(3){c,d,e}中,如果是要以空格或非字符的形式分割,需要用单引号括起来,如new char(){''};
3.用正则表达式
首先在程序中需要引用正则表达式相关的程序集:using System.Text.RegularExpressions;
然后使用方法如下:
string content=agcsmallmacsmallgggsmallytx;
string[]resultString=System.Text.RegularExpressions .Regex.Split(content,small,RegexOptions.IgnoreCase)
foreach(string i in resultString) 
Console.WriteLine(i.ToString());
输出下面的结果:
agc
mac
ggg
ytx

总结:其中对于1,2两种方法较为常用,第3种方法也能实现相应的效果.如果正则表达式这一块的知识比较熟的话,不妨也可以用第3种方法.

 

//===

1、用字符串分隔: 
using System.Text.RegularExpressions;
string str="aaajsbbbjsccc";
string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);
foreach (string i in sArray) Response.Write(i.ToString() + "<br>");
输出结果:
aaa
bbb
ccc
2、用多个字符来分隔:
string str="aaajbbbscccjdddseee"; 
string[] sArray=str.Split(new char[2] {'j','s'}); 
foreach(string i in sArray) Response.Write(i.ToString() + "<br>"); 
输出结果:
aaa
bbb
ccc
ddd
eee
3、用单个字符来分隔:
string str="aaajbbbjccc";
string[] sArray=str.Split('j');
foreach(string i in sArray) Response.Write(i.ToString() + "<br>");
输出结果:
aaa
bbb
ccc

 

 
////////////////////////////////////////////////
string[] arr = str.Split("o");

这是一个具有语法错误的语句,Split 的 separator 参数应该是 char[] 或 string[],不应是字符串。正确的示例:

string str = "technology";
char[] separator = { 'o' };
string[] arr = str.Split(separator);
////////////////////////////////////////////////////

String.Split 方法有6个重载函数:
程序代码
1) public string[] Split(params char[] separator)
2) public string[] Split(char[] separator, int count)
3) public string[] Split(char[] separator, StringSplitOptions options)
4) public string[] Split(string[] separator, StringSplitOptions options)
5) public string[] Split(char[] separator, int count, StringSplitOptions options)
6) public string[] Split(string[] separator, int count, StringSplitOptions options)

下边我们通过一些实例来说明下怎么使用(以下string words = "1,2.3,,4";):
1. public string[] Split(params char[] separator)
程序代码
string[] split = words.Split(new Char[] { ',' });//返回:{"1","2.3","","4"}
string[] split = words.Split(new Char[] { ',', '.' });//返回:{"1","2","3","","4"}
2. public string[] Split(char[] separator, int count)
程序代码
string[] split = words.Split(new Char[] { ',', '.' }, 2);//返回:{"1","2.3,,4"}
string[] split = words.Split(new Char[] { ',', '.' }, 6);//返回:{"1","2","3","","4"}
3. public string[] Split(char[] separator, StringSplitOptions options)
程序代码
string[] split = words.Split(new Char[] { ',', '.' }, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2","3","4"} 不保留空元素
string[] split = words.Split(new Char[] { ',', '.' }, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
4. public string[] Split(string[] separator, StringSplitOptions options)
程序代码
string[] split = words.Split(new string[] { ",", "." }, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2","3","4"} 不保留空元素
string[] split = words.Split(new string[] { ",", "." }, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
5. public string[] Split(char[] separator, int count, StringSplitOptions options)
程序代码
string[] split = words.Split(new Char[] { ',', '.' }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2.3,,4"} 不保留空元素
string[] split = words.Split(new Char[] { ',', '.' }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
6. public string[] Split(string[] separator, int count, StringSplitOptions options)
程序代码
string[] split = words.Split(new string[] { ",", "." }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2.3,,4"} 不保留空元素
string[] split = words.Split(new string[] { ",", "." }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
需要注意的是没有重载函数public string[] Split(string[] separator),所以我们不能像VB.NET那样使用words.Split(","),而只能使用words.Split(',')
//====