String.Split()函数

String.Split()函数

我们在上次学习到了 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.net/119255.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jdk1.8ArrayList主要方法和扩容机制(源码解析)

    jdk1.8ArrayList主要方法和扩容机制(源码解析)ArrayList简介:ArrayList实现了List接口它是一个可调整大小的数组可以用来存放各种形式的数据。并提供了包括CRUD在内的多种方法可以对数据进行操作但是它不是线程安全的,外ArrayList按照插入的顺序来存放数据。ArrayList的主要成员变量:privatestaticfinalintDEFAULT_CAPACITY=10;//数组默认初始容…

    2022年6月5日
    34
  • c语言学生成绩管理系统总结

    c语言学生成绩管理系统总结一、系统功能1.基本功能1.录入信息2.按照学号查找信息3.按照学号修改信息4.按照学号删除信息5.插入信息6.浏览全部信息7.按c语言成绩排序8.保存到文件2.结构体typedefstructstudent{ charnum[20];//学号 charname[10];//姓名 charsex[10];//性别 charduty[10];//专业 inteng;//英语成绩 intmath;

    2022年6月20日
    20
  • C# 图书管理系统【含 源代码+数据库】

    C# 图书管理系统【含 源代码+数据库】1.系统分析1.1基本需求功能点分析图书借阅管理系统,主要目标是简化现有的人工管理,通过科学的计算机管理图书借阅管理,提高工作效率,实现日常管理信息化,无纸化。1)系统用户主要分为两大类:a.管理员用户类(相当于一名有各种操作权限的超级用户)b.普通用户类。系统根据登录页面不同的身份选择登录进入不同页面进行后续操作。2)管理员用户的主要功能:a.管理功能:用户管理、图书管理(图书类别管理、图书信息管理)、读者管理(读者类别管理、读者信息管理)、借阅记录管理、系统管理(注销、退出);b.统计

    2022年6月18日
    40
  • 走进webpack(2)–第三方框架(类库)的引入及抽离

    正文之前,由于这是一个系列的文章,可能第一次看到的看官老爷们会觉得突兀,如果你是webpack新手,我建议你先从前几篇文章看起,如果你对webpack有一些了解,也希望可以在github上下载代码,对

    2022年3月25日
    40
  • android错误之Unable to resolve target ‘Google Inc.:Google APIs:6’

    在导入一个项目是,出现Unable to resolve target ‘Google Inc.:Google APIs:6’ 按下面方式解决: 修改目录下的project.property文件内容为target=Google Inc.:Google APIs:16(在这里他本来可能是其他版本号,不用管它,只需要改成你所导入的包的版本就行,比如我这里已经导入就是api1

    2022年3月10日
    49
  • typeid与decltype[通俗易懂]

    typeid与decltype[通俗易懂]C++在C++98标准中就部分支持动态类型了,C++98对动态类型支持就是C++中的运行时类型识别RTTI。RTTI的机制是为每个类型产生一个type_info类型的数据,程序员可以在程序中使用typeid随时查询一个变量的类型,typeid就会返回变量相应的type_info数据,而type_info的name成员函数可以返回类型的名字。而在C++11中,又增加了hash_code这个成员函…

    2025年10月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号