zoukankan      html  css  js  c++  java
  • .Net转Java.06.字符串的split的区别

    在Java遇到了将类似“1|2|3|4”的字符串分隔为数组的功能

    这种问题能难倒有着十多年开发经验的的.NET码农?

            // Java代码
            String s="1|2|3";
            String[] array=s.split("|");   

    结果,出来的数组是这个鬼样子  1,|,2,|,3

    仔细看看split传入的参数名,regex,是正则表达式,恍然大悟,要转义正则表达式……

            // Java代码
            String s="1|2|3";
            String[] array=s.split("\|");

    问题解决后,继续手贱研究这个split,寻找.NET里边我的最爱选项 StringSplitOptions.RemoveEmptyEntries 在哪里?

    索性做个试验

            // Java代码
            String s="1,2,3,,,";
            String[] array=s.split(",");
            // array的结果是1,2,3

    难倒默认带RemoveEmptyEntries功能?

    然后再试。。。

            // Java代码
            String s="1,2,,,3,,,";
            String[] array=s.split(",");
            // "1","2","","","3"

    这结果算什么鬼???舍尾法的RemoveEmptyEntries,自动舍弃尾部空元素?跟.NET的老码农找不到频道啊。。。

    好吧,就算如此,中间的空元素我自己可以过滤,如果我不想舍弃尾部的空元素可又咋整?

    百度了半天,找到了解决方案 ,如果想保留尾部空元素,要传入limit=-1

            // Java代码
            String s="1,2,,,3,,,";
            String[] array=s.split(",",-1); // 传入-1,保留尾部的空元素
            // "1","2","","","3","","",""

     好吧,我继续研究第二个参数limit

    public String[] split(String regex, int limit)

    从字面意思,应该是限制split返回数组元素的个数,

    这个limit的含义倒是跟.NET的count参数非常类似

    // C#代码
    public String[] Split(String[] separator, int count, StringSplitOptions options)

    如果limit或者count=n,表示匹配的次数为n-1

                // C#代码
                String s = "1|2|3|||4";
                String[] array = s.Split(new String[] { "|" }, 2, StringSplitOptions.RemoveEmptyEntries);
                // array的结果为{"1","2|3|||4"}
            // Java代码
            String s="1,2,,,3,,,";
            String[] array=s.split(",",2); 
            // array的结果{"1","2,,,3,,,"}

    看到这里,自以为都搞懂了

    结果下面测试又让我郁闷了

            // Java代码
            String s1="";
            String[] array1=s1.split(",");
            // array1的结果是{""} 数组含1空元素
    
            String s2=",";
            String[] array2=s2.split(",");
            // array2的结果是{} 数组含0元素

    这结果我是真想12315投诉了。。。

  • 相关阅读:
    第4天:Ansible模块
    第3天:YAML语法
    使用EXtjs6.2构建web项目
    Node中的定时器详解
    java中使用MD5加密技术
    Node+Socketio实现消息群发功能
    Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示
    那些年构建SSH所遇到的坑
    浅谈时间复杂度与空间复杂度
    创建视图并删除相关表中的记录
  • 原文地址:https://www.cnblogs.com/wormday/p/8059742.html
Copyright © 2011-2022 走看看