String源码 spilt
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相关推荐
- Java源码详解四:String源码分析--openjdk java 11源码
文章目录 注释 类的继承 数据的存储 构造函数 charAt函数 equals函数 hashCode函数 indexOf函数 intern函数 本系列是Java详解,专栏地址:Java源码分析 Str ...
- 程序兵法:Java String 源码的排序算法(一)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第103篇原创 <程序兵法:Java Str ...
- 【JAVA】String源码浅谈
String源码浅谈 String这个类可以说是我们使用得最为频繁的类之一了,前几次去面试,都被问到String的底层源码,回答得都不是很好,今天就来谈谈一下String的源码. 一.String类 ...
- java基础进阶一:String源码和String常量池
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8046564.html 邮箱:moyi@moyib ...
- Java - String源码解析及常见面试问题
文章目录 Pre Q1: String 是如何实现的? Q2: String 有哪些重要的方法? 构造函数 equals() compareTo() [equals() vs compareTo() ...
- String源码分析
最近开始阅读java底层的源码,是因为发现越到后面越发现读源码的重要性,真的很重要,不阅读源码,你会发现"路"越走越窄. 今天看到了String的这个构造方法, /*** Init ...
- java的map 使用string数组多了双引号_奥奥奥利给!!!再也不怕面试官问我String源码了!来吧...
简述 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了String 类来创建和操作字符串.字符串缓冲区支持可变字符串.因为String对象是不可变的,因此可以共享 ...
- String源码解析
本章源码分析基于JDK1.7 实现的接口 String类被final修饰词修饰,代表不可修改的特性,它实现了三个接口,Serializable是序列化接口,Compareble是排序接口,Char是字 ...
- 从 重复叠加字符串匹配 看Java String源码中的contains方法
原题:重复叠加字符串匹配 解题思路已经写在代码中了: class Solution {public:bool contain(string &a, string &b, long lo ...
- String源码分析,中高级Java开发面试题
空参构造 public String() {this.value = "".value;} 解析 String str=new String("abc");1. ...
最新文章
- 于正AI换脸火上热搜,差点骗了全网!古风民族风也能任意切换
- mysql 锁测试_mysql行级锁测试 - echowu007的个人空间 - OSCHINA - 中文开源技术交流社区...
- linux挂载U盘,及乱码问题解决
- 组织架构递归_映射架构和递归管理数据–第2部分
- selenium 使用
- 基于Token的WEB后台登录认证机制(并讲解其他认证机制以及cookie和session机制)
- python有类似spring_Python的Spring与J的Spring相比
- usb4java android,USB audio on Android platform
- ADO.NET访问数据集的表、行和列
- Javascript: 前端JS生成验证码
- 计算机专业需要外语口试,计算机专业英语词汇大全,计算机专业必读英语词汇!...
- 苹果计算机快捷键设置,苹果电脑怎么改快捷键
- 一招教你表格里面给方框内打勾
- 码畜 码奴 码农 IT民工和IT其他工种的划分定义
- 太过伤心,小王被这 10 道 Java 面试题虐哭了
- MySql导入、导出数据解决方案(SQL语句)
- 03 day2--javascript笔记pink老师--对象
- 神级程序员都在用什么工具?【建议收藏】
- 该内存不能written
- WannaCry——windows7补丁安装和下载地址
热门文章
- Linux中的截图工具
- 体脂手环、体脂秤等产品的体脂测量原理及技术方案分析
- [论文笔记]Fader Networks: Manipulating Images by Sliding Attributes(2017 NIPS)
- Ubuntu Linux的虚拟机安装Windows86X虚拟机安装(Ubuntu ISO64Bit)
- file_put_contents学习笔记
- 从启动过程讲述普元Mobile 8.0基座
- 11.1 项目风险管理
- 微信屏蔽网站域名,提示“已停止访问该网页”该怎么办?
- Paper intensive reading (二十五):Fecal Viral ...Virion-Enriched Metagenomics and Metatranscriptomics
- [SSL_CHX][2021-8-20]最大质因子序列