public String[] split(String regex, int limit) {return Pattern.compile(regex).split(this, limit);}public String[] split(String regex) {return split(regex, 0);}//javase 1.7api中String类的split方法public String[] split(String regex, int limit) {char ch = 0;if (((regex.value.length == 1 &&             //长度等于1".$|()[{^?*+\\".indexOf(ch = regex.charAt(0)) == -1) ||         //正则的第一个字符不是在  ".$|()[{^?*+\\" 中(regex.length() == 2 &&                               //长度等于2的同时regex.charAt(0) == '\\' &&                           //第一个字符为 \            (((ch = regex.charAt(1))-'0')|('9'-ch)) < 0 &&       // 这种判断是 ch < '0' && ch > '9' 时, 返回 true ,  也就是: (负数 | 负数) <0 ; 下同理((ch-'a')|('z'-ch)) < 0 &&((ch-'A')|('Z'-ch)) < 0)) &&(ch < Character.MIN_HIGH_SURROGATE ||ch > Character.MAX_LOW_SURROGATE)){int off = 0;int next = 0;boolean limited = limit > 0;ArrayList<String> list = new ArrayList$amp; while ((next = indexOf(ch, off)) != -1) {if (!limited || list.size() < limit - 1) {list.add(substring(off, next));off = next + 1;} else {             // last one ,如果传入返回数组长度,则 打到限制长度后,添加off 到原字符串末尾的字符串。//assert (list.size() == limit - 1);list.add(substring(off, count));off = count;break;}}// If no match was found, return thisif (off == 0)                                      return new String[] { this };// Add remaining segmentif (!limited || list.size() < limit)   // 问题2的解答:如果未到长度限制,或者未传入第二个参数,添加 off 到末尾的字符串list.add(substring(off, count));// Construct resultint resultSize = list.size();if (limit == 0)while (resultSize > 0 && list.get(resultSize-1).length() == 0)  resultSize--;// 问题1解答:如果我们不传入split的第二个参数,或者传0,那么最后此方法会从添加的最后一个元素开始,循环删除掉长度为0的“”字符串直到遇到第一个不为空的字符串(从后面开始的,所以就是遇到最后一个不为空的字符串时,停止删除),;String[] result = new String[resultSize];return list.subList(0, resultSize).toArray(result);   //subList此方法返回父list的一个视图}return Pattern.compile(regex).split(this, limit); /// 关于这个的话,需要了解一下正则表达式了,我给一篇好问题:https://my.oschina.net/u/1187481/blog/215379}

先上源码,之前做项目这里遇到了一个坑,没有传limit,默认为0,结果分割结果数组末尾为空的字符被删掉了,导致转换map短了。  分析源码发现 limit传-1或者其他负数可以返回完全的分割结果,不传或者传0会删除末尾为空的分割,知道遇到一个不为空的分割,传递limit会返回前limit个分割结果

String源码 spilt相关推荐

  1. Java源码详解四:String源码分析--openjdk java 11源码

    文章目录 注释 类的继承 数据的存储 构造函数 charAt函数 equals函数 hashCode函数 indexOf函数 intern函数 本系列是Java详解,专栏地址:Java源码分析 Str ...

  2. 程序兵法:Java String 源码的排序算法(一)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 <程序兵法:Java Str ...

  3. 【JAVA】String源码浅谈

    String源码浅谈 String这个类可以说是我们使用得最为频繁的类之一了,前几次去面试,都被问到String的底层源码,回答得都不是很好,今天就来谈谈一下String的源码. 一.String类 ...

  4. java基础进阶一:String源码和String常量池

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8046564.html 邮箱:moyi@moyib ...

  5. Java - String源码解析及常见面试问题

    文章目录 Pre Q1: String 是如何实现的? Q2: String 有哪些重要的方法? 构造函数 equals() compareTo() [equals() vs compareTo() ...

  6. String源码分析

    最近开始阅读java底层的源码,是因为发现越到后面越发现读源码的重要性,真的很重要,不阅读源码,你会发现"路"越走越窄. 今天看到了String的这个构造方法, /*** Init ...

  7. java的map 使用string数组多了双引号_奥奥奥利给!!!再也不怕面试官问我String源码了!来吧...

    简述 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了String 类来创建和操作字符串.字符串缓冲区支持可变字符串.因为String对象是不可变的,因此可以共享 ...

  8. String源码解析

    本章源码分析基于JDK1.7 实现的接口 String类被final修饰词修饰,代表不可修改的特性,它实现了三个接口,Serializable是序列化接口,Compareble是排序接口,Char是字 ...

  9. 从 重复叠加字符串匹配 看Java String源码中的contains方法

    原题:重复叠加字符串匹配 解题思路已经写在代码中了: class Solution {public:bool contain(string &a, string &b, long lo ...

  10. String源码分析,中高级Java开发面试题

    空参构造 public String() {this.value = "".value;} 解析 String str=new String("abc");1. ...

最新文章

  1. 于正AI换脸火上热搜,差点骗了全网!古风民族风也能任意切换
  2. mysql 锁测试_mysql行级锁测试 - echowu007的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. linux挂载U盘,及乱码问题解决
  4. 组织架构递归_映射架构和递归管理数据–第2部分
  5. selenium 使用
  6. 基于Token的WEB后台登录认证机制(并讲解其他认证机制以及cookie和session机制)
  7. python有类似spring_Python的Spring与J的Spring相比
  8. usb4java android,USB audio on Android platform
  9. ADO.NET访问数据集的表、行和列
  10. Javascript: 前端JS生成验证码
  11. 计算机专业需要外语口试,计算机专业英语词汇大全,计算机专业必读英语词汇!...
  12. 苹果计算机快捷键设置,苹果电脑怎么改快捷键
  13. 一招教你表格里面给方框内打勾
  14. 码畜 码奴 码农 IT民工和IT其他工种的划分定义
  15. 太过伤心,小王被这 10 道 Java 面试题虐哭了
  16. MySql导入、导出数据解决方案(SQL语句)
  17. 03 day2--javascript笔记pink老师--对象
  18. 神级程序员都在用什么工具?【建议收藏】
  19. 该内存不能written
  20. WannaCry——windows7补丁安装和下载地址

热门文章

  1. Linux中的截图工具
  2. 体脂手环、体脂秤等产品的体脂测量原理及技术方案分析
  3. [论文笔记]Fader Networks: Manipulating Images by Sliding Attributes(2017 NIPS)
  4. Ubuntu Linux的虚拟机安装Windows86X虚拟机安装(Ubuntu ISO64Bit)
  5. file_put_contents学习笔记
  6. 从启动过程讲述普元Mobile 8.0基座
  7. 11.1 项目风险管理
  8. 微信屏蔽网站域名,提示“已停止访问该网页”该怎么办?
  9. Paper intensive reading (二十五):Fecal Viral ...Virion-Enriched Metagenomics and Metatranscriptomics
  10. [SSL_CHX][2021-8-20]最大质因子序列