zoukankan      html  css  js  c++  java
  • 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连续的两个" , "间 觉得有个空格符“ “也能够。不正确的请帮忙指出哪里 欣赏 。


     


  • 相关阅读:
    Springboot 之 自定义配置文件及读取配置文件
    SQLSERVER系统视图 sql server系统表详细说明
    MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义
    使用Ecplise git commit时出现"There are no stages files"
    maven添加sqlserver的jdbc驱动包
    java将XML文档转换成json格式数据
    java将XML文档转换成json格式数据
    cannot be resolved. It is indirectly referenced from required .class files
    org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value '2012-12-12 12:01:01': not a valid representation (error: Can not parse date "2012-12-
    @Autowired注解和静态方法 NoClassDefFoundError could not initialize class 静态类
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4591978.html
Copyright © 2011-2022 走看看