• 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)方法
     

  • 相关阅读:
    怎样优雅地增删查改(八):按用户关系查询
    软考 --- 数据库(3)数据操作
    JavaScript进阶-作用域
    《蓝海战略》让你竞争中获得优势
    PyQt5快速开发与实战 8.4 设置窗口背景 && 8.5 不规则窗口的显示
    MySQL系列之隔离级别
    Fusion Compute网络虚拟化
    【Linux】CentOS8.4 安装docker
    有关栈和队列的三道OJ题【C语言】
    2312. 卖木头块
  • 原文地址:https://blog.csdn.net/sumengnan/article/details/132753032