我们在上次学习到了 String.Join函数(http://blog.csdn.net/zhvsby/archive/2008/11/28/3404704.aspx),当中用到了String.SPlit函数,所以能够上网查了该函数的用法 例如以下:
#中使用string.Split方法来切割字符串的注意事项: string.Split给我们提供了非常灵活的使用方式, 可是假设使用不当, 会造成错误, 近期在做code review时, 看到大部分人这么使用: string s = “A|B|:|C:D”; string[] ss = s.Split(“|:|”.ToCharArray()); //ss[0]: A //ss[1]: B //ss[2]: //ss[3]: //ss[4]: C //ss[5]: D 事实上他的本意是使用”|:|”将字符串分开的, 目标是为了得到数组: “A|B” 和 “C:D”, 可是没有直接找到Split(string)的重载, 全部就是用了ToCharArray(), 非常显然, 得到的结果是错误的.
正确的使用方法为: string[] ss1 = s.Split(new[] {“|:|”}, StringSplitOptions.None); //ss1[0]: A|B //ss1[1]: C:D 后一个參数, 是标志是否自己主动remove empty的数据. 比如: “A|B|:|C:D|:|” 做切割时, 会返回三个数组, 该数组的最后一个元素是空“”, 假设我们想过滤掉这些空的元素, 能够使用參数: StringSplitOptions.RemoveEmptyEntries 即: string[] ss1 = s.Split(new[] {“|:|”}, StringSplitOptions.RemoveEmptyEntries); 样例:
s = “A|B|:|C:D|:|”; string[] ss1 = s.Split(new[] {“|:|”}, StringSplitOptions.RemoveEmptyEntries); //ss1[0]: “A|B” //ss1[1]: “C:D”
ss1 = s.Split(new[] { “|:|” }, StringSplitOptions.None); //ss1[0]: “A|B” //ss1[1]: “C:D” //ss1[2]: “”
首先我们看下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″} 保留空元素
个人理解:Split 就是和String.Join相反的一个函数 它的作用是把一个字符串分隔成含有多个字段的数组
我如今仅仅对上面的一种方法进行分析:
string[] split = words.Split(new Char[] { ‘,’, ‘.’ }, 6);//返回:{“1″,”2″,”3″,””,”4″}
为什么返回的有了个空的“” 呢,自己当时也是不理解
事实上它就是以” , ” 和“ . ” 两个分隔符来拆分 字符串 1,2.3,,4的 当找到 3 后面的第一个”, “ 时候说明此处要分开了
可是它后面又是一个分隔符 ”, ” 怎么办呢 这是就仅仅能当成 ” ” 空来处理了 你能够变相的把 1,2.3,,4连续的两个” , “间 觉得有个空格符“ “也能够。不正确的地方请大家帮指出来 不胜感激 。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119255.html原文链接:https://javaforall.cn
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有