Java中String.split()的最详细源码解读及注意事项

 更新时间:2022年07月26日 13:14:10   作者:Killing Vibe  
以前经常使用String.split()方法,但是从来没有注意,下面这篇文章主要给大家介绍了关于Java中String.split()最详细源码解读及注意事项的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下

前言

博主针对字符串分割时出现的各种空字符串问题,进入String类的源码看了一下,现作如下解读及演示:

一、split(regex,limit)

首先是带有两个参数的split方法:

作用:

将以给定正则表达式(regex)的字符串分隔开来

  • 第一个参数是传入字符类型的分隔符,如 “,” 等(可以是任何字符串)
  • 第二个参数传入整型的limit,代表的是将此字符串分割成n部分(这里的n就是limit).

返回值:

此方法返回的数组包含此字符串的每个子字符串,这些子字符串以匹配到的正则表达式(就是以输入的第一个参数regex)作为结束,或由字符串的结尾作为结束。

注意事项:

  1. 数组中的子字符串按照它们在这个字符串中出现的顺序排列。
  2. 如果输入的regex不匹配字符串里面的任何字符,那么结果数组只有一个元素,即这个字符串。(就是若字符串里面没有出现输入的regex参数)
  3. 如果在字符串的开头有一个正数的匹配(就是字符串开头有>0个的regex分隔符),那么在结果数组的开头会包含一个空的前导子字符串.
public class test {
    public static void main(String[] args) {
        String str = ",,1,2,3,4"; // 注意这里字符串开头就匹配到了逗号
        String[] s = str.split(",",10);// 这里先取10,后文介绍第二个参数
        for (String string : s) {
            System.out.println("子字符串"+string);
        }
        System.out.println(s.length);
    }

}

运行结果:

第一个逗号前面会有出现一个空的子字符串

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

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

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

}

运行结果:

字符串被分隔成2个子字符串,分隔模式是从前往后的

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

public class test {
    public static void main(String[] args) {
        String str = "1,2,3,4,,,";// 这里后面逗号之间的空字符串将被丢弃
        String[] s = str.split(",",0);
        for (String string : s) {
            System.out.println("子字符串"+string);
        }
        System.out.println(s.length);
    }

}

运行结果:

尾部的空字符串将不会出现在结果数组里

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

public class test {
    public static void main(String[] args) {
        String str = ",1,2,3,4,";
        String[] s = str.split(",",-1);//limit值为负数
        for (String string : s) {
            System.out.println("子字符串"+string);
        }
        System.out.println(s.length);
    }

}

运行结果:

字符串的尾部空字符串不会被丢失

二、split(regex)

接下来只带有一个参数的split方法就容易了,就是默认limit的值为0.

该方法的工作原理就是用给定regex参数和一个limit参数默认为0来调用两个参数的split方法。因此,结果数组中不包含尾随的空字符串。

总结

到此这篇关于Java中String.split()的最详细源码解读及注意事项的文章就介绍到这了,更多相关java String.split()源码解读内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中的隐式参数和显示参数实例详解

    Java中的隐式参数和显示参数实例详解

    这篇文章主要介绍了Java中的隐式参数和显示参数是什么,另外还有两个小例子帮助大家理解,需要的朋友可以参考下。
    2017-08-08
  • Java实现顺序表的增删查改功能

    Java实现顺序表的增删查改功能

    这篇文章主要介绍了Java实现顺序表的增删查改功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 基于SpringBoot和Vue3的博客平台文章列表与分页功能实现

    基于SpringBoot和Vue3的博客平台文章列表与分页功能实现

    在前面的教程中,我们已经实现了基于Spring Boot和Vue3的发布、编辑、删除文章功能。本教程将继续引导您实现博客平台的文章列表与分页功能,需要的朋友可以参考阅读
    2023-04-04
  • 浅谈@Aspect@Order各个通知的执行顺序

    浅谈@Aspect@Order各个通知的执行顺序

    这篇文章主要介绍了@Aspect@Order各个通知的执行顺序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 使用Mybatis的PageHelper分页工具的教程详解

    使用Mybatis的PageHelper分页工具的教程详解

    这篇文章主要介绍了使用Mybatis的PageHelper分页工具的教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 详解MyBatis resultType与resultMap中的几种返回类型

    详解MyBatis resultType与resultMap中的几种返回类型

    本文主要介绍了MyBatis resultType与resultMap中的几种返回类型,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • ShardingJdbc读写分离的BUG踩坑解决

    ShardingJdbc读写分离的BUG踩坑解决

    这篇文章主要为大家介绍了ShardingJdbc读写分离的BUG踩坑解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Spring Boot Admin 快速入门详解

    Spring Boot Admin 快速入门详解

    这篇文章主要介绍了SpringBoot Admin 使用指南(推荐),Spring Boot Admin 是一个管理和监控你的 Spring Boot 应用程序的应用程序,非常具有实用价值,需要的朋友可以参考下
    2021-11-11
  • SpringBoot各种事务操作实战(自动回滚、手动回滚、部分回滚)

    SpringBoot各种事务操作实战(自动回滚、手动回滚、部分回滚)

    本文主要介绍了SpringBoot各种事务操作实战,包含自动回滚、手动回滚、部分回滚这三种,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • SpringBootAdmin+actuator实现服务监控

    SpringBootAdmin+actuator实现服务监控

    这篇文章主要为大家详细介绍了SpringBootAdmin+actuator实现服务监控,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01

最新评论