C#中使用Split分隔字符串的技巧

C#中使用Split分隔字符串的技巧 作者:icech整理 发布时间:2009-8-18 16:12:13 文章来源:西部E网 在分割字符串的时候我们常常会用到Split,下面我们就来学习一下分割字符串的技巧和方法。 1、使用String.Split单字符分割 String.Split方法 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 返回的字符串数组包含此实例中的子字符串(由指定字符串或 Unicode 字符数组的元素分隔)。 Split(Char[]) 返回的字符串数组包含此实例中的子字符串(由指定 Unicode 字符数组的元素分隔)。 Split(Char[], Int32) 返回的字符串数组包含此实例中的子字符串(由指定 Unicode 字符数组的元素分隔)。参数指定返回的子字符串的最大数量。 Split(Char[], StringSplitOptions) 返回的字符串数组包含此字符串中的子字符串(由指定 Unicode 字符数组的元素分隔)。参数指定是否返回空数组元素。 Split(String[], StringSplitOptions) 返回的字符串数组包含此字符串中的子字符串(由指定字符串数组的元素分隔)。参数指定是否返回空数组元素。 Split(Char[], Int32, StringSplitOptions) 返回的字符串数组包含此字符串中的子字符串(由指定 Unicode 字符数组的元素分隔)。参数指定要返回子字符串的最大数量,以及是否要返回空数组元素。 Split(String[], Int32, StringSplitOptions) 返回的字符串数组包含此字符串中的子字符串(由指定字符串数组的元素分隔)。参数指定要返回子字符串的最大数量,以及是否要返回空数组元素。 示例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[] sArray1=s.Split(new char[3]{'c','d','e'}) ; foreach(string i in sArray1) Console.WriteLine(i.ToString()); 可以输出下面的结果: ab ab ab 示例3: string str1=我*****是*****一*****个*****教*****师; string[] str2; str1=str1.Replace(*****,*) ; str2=str1.Split(*) ; foreach(string i in str2) Console.WriteLine(i.ToString()); 示例4: string str1=我**是*****一*****个*****教*****师; 我希望显示的结果为:我是一个教师。我如果采用上面的第四种方法来做就会产生下面的错误:我 是一个教师。中间有空格输出,所以输出结果并不是希望的结果,这就又回到了正则表达式了,这时可以采用下面的第五种方法: string str1=我**是*****一*****个*****教*****师; string[] str2 = System.Text.RegularExpressions.Regex.Split(str1,@[*]+); foreach(string i in str2) Console.WriteLine(i.ToString()); 这里通过[*]+ 巧妙的完成了我们的目标。 示例5: string strBreak = "|"; string str= "111"+ strBreak +"222"+ strBreak +"333"+ strBreak +"444"; string[] arr1=str.Split('|') ; foreach(string i in arr1) Response.Write( i.ToString() +"<br>\n"); 结果(符合要求) =============== 111<br> 222<br> 333<br> 444<br> 示例6: tring strBreak = "||"; string str= "111"+ strBreak +"222"+ strBreak +"333"+ strBreak +"444"; char[] arrChr = strBreak.ToCharArray(); string[] arr1=str.Split(arrChr) ; //string[] arr1=str.Split(new char[2]{'|','|'}) ;//或者这样写 foreach(string i in arr1) Response.Write( i.ToString() +"<br>\n"); 结果(有几个字符就会打印几个<br>,不符合要求) =============== 111<br> <br> 222<br> <br> 333<br> <br> 444<br> 示例7: 用正则来处理多字符的情况。 string strBreak = "||"; string str= "111"+ strBreak +"222"+ strBreak +"333"+ strBreak +"444"; string[] arr1=Regex.Split(str,@"\|\|",RegexOptions.IgnoreCase); //string[] arr1=Regex.Split(str,"\\u007C\\u007C",RegexOptions.IgnoreCase); //也可以用 \\u007C 替代特殊字符 | foreach(string i in arr1) Response.Write( i.ToString() +"<br>\n"); 结果(符合要求) =============== 111<br> 222<br> 333<br> 444<br> 2、使用Regex.Split多字符分割 命名空间:System.Text.RegularExpressions 程序集:System(在 system.dll 中) Regex.Split 方法与 Split 方法类似,但后一种方法在由正则表达式而不是一组字符确定的分隔符处拆分字符串。如果指定 count,则至多将该字符串拆分为 count 个字符串(最后一个字符串包含该字符串其余未拆分的部分);count 值为零则采用默认拆分行为(即尽可能多地进行拆分)。如果指定了 startat,则搜索第一个分隔符,以便从指定的位置开始执行操作(例如,这可以用于跳过前导空白)。 如果在 Regex.Split 表达式中使用捕获组,则生成的字符串数组中会包含捕获组。下面的示例会产生数组项“one”、“-”、“two”、“-”、“banana”。 Regex r = new Regex("(-)"); // Split on hyphens. string[] s = r.Split("one-two-banana"); 如果正则表达式可以匹配空字符串(例如 x*),则 Split 会将字符串拆分为由单个字符组成的字符串的数组,因为在每个位置都可以找到空字符串分隔符。 静态 Split 方法等效于使用指定的正则表达式模式构造 Regex 对象并调用实例方法 Split。提供静态方法是为了独立、单独地使用正则表达式,而不用显式创建 Regex 对象。 示例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>"); =================== 最近经常看到论坛中许多帖子询问如何使用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; 'http://www.knowsky.com Main() :中更改为 System.Text.RegularExpressions string 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()); 这里通过"[*]+" 巧妙的完成了我们的目标。



第一种方法:

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

output:

ab
deab
deab
de

 


第二种方法:
我们看到了结果是以一个指定的字符进行的分割。使用另一种构造方法对多个字符进行分割:

 

string s=abcdeabcdeabcde
string[] sArray1=s.Split(new char[3]...{'c','d','e'}) ;
foreach(string i in sArray1)
Console.WriteLine(i.ToString());

output:
ab
ab
ab

 

第三种方法:
除了以上的这两种方法以外,第三种方法是使用正则表达式。新建一个控制台项目


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

output:

agc
mac
ggg
ytx

 

第四种方法:


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());


我希望显示的结果为:我是一个教师。
我如果采用上面的第四种方法来做就会产生下面的错误:我 是一个教师。中间有空格输出,所以输出结果并不是希望的结果,这就又回到了正则表达式了,这时可以采用下面的第五种方法:

这里通过
+ 巧妙的完成了我们的目标。  总结Java中使用split分隔字符串

1、转义字符 "\"
转义字符进行分隔时,需要将转义字符再转义一次,也就是"\\"

2、正则表达式字符

publicclass Test {
   
    publicstaticvoid main(String[] args) {
       String str = "a|b";
       System.out.println(str.split("|").length);
    }
   
}
由于|属于正则表达式字符,split的参数也是正则表达式,这里 得到的结果是 4,修改"|"为[|],得到的结果为2

从上面的结果我们可知,像replaceAll这类函数代替换字符为正则表达式字符时同样加上"[]"进行replace.

看例子:
  String str = "123456002,123456001,2,90,|,123456002,123456001,2,90,";
  String[] sTemp = str.split( "\|" );
  System.out.println(sTemp.length);
  System.out.println(sTemp[0]);

输出结果:

2
123456002,123456001,2,90,

对于类似于"|"这样的特殊分隔符,需要先用"|"转义,由于""本身也是特殊字符,应先用"\"转义得到""
在java.lang包中有String.split()方法,返回是一个数组
我在应用中用到一些,给大家总结一下,仅供大家参考:
1、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
2、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是转义字符,必须得加"\\";
3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“acount=? and uu =? or n=?”,把三个都分隔出来,可以用String.split("and|or");



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值