在分割字符串的时候我们常常会用到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>");
字符串的常用操作(字符串的操作用得比较多,须掌握扎实)
Length:属性,返回字符串中的字符个数。
LastIndexOf-反向搜索函数 |
返回字符串中子字符串的最后出现的字符位置,从后向前找。 |
0<=startIndex<Length 0<count<=startIndex+1 |
Insert-插入函数 |
string Insert(int startIndex,string value); |
在字符串的指定索引位置插入一个字符串。 在返回的字符串中,value字符串的第一个字符的索引号为startIndex。 |
Remove-删除函数 |
string Remove(int startIndex,int count); |
从字符串的指定索引位置删除指定数目的字符。 索引和计数必须引用该字符串内的位置,startIndex+count<=Length |
Replace-替换函数 |
string Replace(char oldChar,char newChar); |
string Replace(string oldValue,string newValue); |
Concat-连接函数 |
string Concat(参数); |
参数可以是对象、对象数组、字符串、字符串数组,多个对象(字符串)间以逗号分隔 |
Join-串联函数 |
string Join(string separator,string[] value); |
在字符串数组的每个元素之间串联指定的分隔符,从而产生单个串联的字符串。 |
string Join(string separator,string[] value,int startIndex,int count); |
串联部分数组元素,从第startIndex个元素开始,串联count个元素。 |
Split-分割函数 | |
string[] Split(params char[] separator); | |
根据分割字符将字符串分割成子字符串,然后将结果作为字符串数组返回。 | |
string[] Split(char[] separator,int count); | |
参数count指定返回的最大数组元素数,进行部分分割 | |
示例:string mystr="1+2+3-4+5+6"; | |
表达式 | 返回 |
mystr.Split('-'); | {"1+2+3","4+5+6"} |
mystr.Split("+-".ToCharArray()); | {"1","2","3","4","5","6"} |
mystr.Split(new char[]{'+','-'}); | {"1","2","3","4","5","6"} |
mystr.Split("+-".ToCharArray(),4); | {"1","2","3","4+5+6"} |
mystr.Split("+-".ToCharArray(),100); | {"1","2","3","4","5","6"} |
注意上面分隔字符的几种用法 部分分割时,最多返回count个元素。 |
ToCharArray-打散函数(哈哈,借用Flash中的术语了) | |
char[] ToCharArray(); | |
将字符串中的字符复制到字符数组。 | |
char[] ToCharArray(int startIndex,int length); | |
将字符串中的指定子字符串内的字符复制到字符数组。 | |
示例:string mystr="Diffmaker"; | |
表达式 | 返回 |
mystr.ToCharArray(); | {'D','i','f','f','m','a','k','e','r'} |
mystr.ToCharArray(4,4); | {'m','a','k','e'} |
Trim|TrimStart|TrimEnd-修剪函数 |
string Trim();//移除字符串首尾空白字符(包括中英文空格) |
string TrimStart();//移除字符串首部空白字符(包括中英文空格) |
string TrimEnd();//移除字符串尾部空白字符(包括中英文空格) |
string Trim(params char[] trimChars);//移除字符串首尾字符 |
string TrimStart(params char[] trimChars);//移除字符串首部字符 |
string TrimEnd(params char[] trimChars);//移除字符串尾部字符 |
当不指定参数时,移除的是空白字符 当指定参数时,移除的是指定字符 |
StartsWith|EndsWith-端点函数 |
bool StartsWith(string value);//检测字符串是否以子串开始 |
bool EndsWith(string value);//检测字符串是否以子串结束 |
PadLeft|PadRight-填充函数 |
string PadLeft(int totalWidth);//在字符串左侧添加空格,使其达到指定长度 |
string PadRight(int totalWidth);//在字符串右侧添加空格,使其达到指定长度 |
string PadLeft(int totalWidth,char paddingChar);//左侧添加指定字符到定长 |
string PadRight(int totalWidth,char paddingChar);//右侧添加指定字符到定长 |
Substring-取子函数 |
string Substring(int startIndex);//从指定的字符位置开始至串尾 |
string Substring(int startIndex,int length);//从指定的字符位置开始取指定长度 |
startIndex 从零开始 如果startIndex等于字符串的长度,则返回:string.Empty startIndex+count<=Length |
其他简单函数 |
String.ToLower();//转小写函数 |
String.ToUpper();//转大写函数 |