• java string.split(“,“)方法的坑


    1、正常来说我们split(",")一个字符串,按逗号切分,会得到“,的数量”+1个string数组。

    例如:

    1. "1,2,3,4".split(",") 返回 ["1","2","3","4"]
    2. ",,,4".split(",") 返回 ["","","","4"]

    2、但是如果是

    ",,,,".split(",") 会返回 空数组[] (坑)

    3、如果想返回相应的长度,需要使用split的第二个方法

    public String[] split(String regex, int limit)
    ",,,".split(",",-1)   返回 ["","","",","]

    关于limit参数

    limit参数控制应用模式的次数,因此会影响结果数组的长度。(这里的意思就是limit的取值控制了结果数组的长度)

    (1) 如果limit输入的是一个正数, 那么该模式将最多应用limit - 1次(就是说只会用输入的regex去字符串里面匹配limit-1次),数组的长度将不大于limit,并且数组的最后一个条目将包含最后一个匹配的分隔符之外的所有输入(就是说他分隔的模式是从前逐个往后的).

    1. public class test {
    2. public static void main(String[] args) {
    3. String str = "1,2,3,4";
    4. String[] s = str.split(",",2);//这里输入limit为2,即分成2部分
    5. for (String string : s) {
    6. System.out.println("子字符串"+string);
    7. }
    8. System.out.println(s.length);
    9. }
    10. }
    11. 返回:
    12. 子字符串1
    13. 子字符串2,3,4
    14. 2


    (2) 如果输入的limit为零,则模式将被应用尽可能多的次数,结果数组可以有任何长度,而尾部的空字符串将被丢弃. (就是匹配字符串里面所有的regex分隔符),关于空字符串被丢弃(string.split()默认方法的limit参数就为0)

    1. public class test {
    2. public static void main(String[] args) {
    3. String str = "1,2,3,4,,,";// 这里后面逗号之间的空字符串将被丢弃
    4. String[] s = str.split(",",0);
    5. for (String string : s) {
    6. System.out.println("子字符串"+string);
    7. }
    8. System.out.println(s.length);
    9. }
    10. }
    11. 返回
    12. 子字符串1
    13. 子字符串2
    14. 子字符串3
    15. 子字符串4
    16. 4


    (3) 如果输入limit的值为负数,则模式将被应用尽可能多的次数,数组可以有任何长度。(尾部的空字符串也不会被丢失噢)
     

    1. public class test {
    2. public static void main(String[] args) {
    3. String str = ",1,2,3,4,";
    4. String[] s = str.split(",",-1);//limit值为负数
    5. for (String string : s) {
    6. System.out.println("子字符串"+string);
    7. }
    8. System.out.println(s.length);
    9. }
    10. }
    11. 返回:
    12. 子字符串
    13. 子字符串1
    14. 子字符串2
    15. 子字符串3
    16. 子字符串4
    17. 子字符串
    18. 6

    综上所述

    使用split时如果想按照split(",")截取具体的长度,需要使用split(",",-1)方法
     

  • 相关阅读:
    centos 7.9 安装python 3.10的tls问题,
    Servlet程序及部署方式(Tomcat+Smart Tomcat)
    【C语言】数组
    2023年航空航天、机械与机电工程国际会议(CAMME 2023)
    线程相关方法
    工欲善其事,必先利其器-使用vscode搭建go语言开发环境
    Hadoop学习1
    冷冻电镜聚类中心(2D Class)粒子图像的解析
    SpringCloud-Hystrix服务熔断与降级工作原理&源码
    15 Spring Security OAuth2登录(三方登录)
  • 原文地址:https://blog.csdn.net/sumengnan/article/details/132753032