前言
- jdk的注释已经写的很明白了,本文只是在此基础上再归纳一下。重点是归纳下
str.split(regex, limit)第二个参数的用法

jdk注释理解
-
matches this pattern体现了正则表达式的应用,也就是入参可以使用正则,源码也很清晰的在用Matcher m = matcher(input); // Add segments before each match found while(m.find()) { //... } } -
原始字符串
str调用split方法,即String[] = str.split(regex)接收input,返回一个数组。该数组的元素都为str的子串- str的子串来源于
str被regex匹配的字符串分割。- 形如
"1,2,3,4".split(",")会被分割为["1","2","3","4"] - 如果input没有匹配到任何值,即
"1234".split(","),返回值为["1234"]
- 形如
- str的子串来源于
-
返回值的数组中可以存在0长度的字符串,以下两个返回值都是合法的
["1","2"]["1","2","",""]
-
String[] = str.split(regex, limit)考虑函数的第二个参数limit == n > 0- 返回的字符串数组至多n-1次
limit == n < 0- 尽可能多的匹配,返回的字符串数组末尾不舍弃空字符串的元素
limt == n == 0- 尽可能多的匹配,返回的字符串数组末尾舍弃空字符串的元素
使用时机
// 对字符串boo:and:foo , 以字母o作为分割符,尽可能匹配limit次
"boo:and:foo".split("o", limit);
函数解决参数歧义
// 对字符串boo:and:foo , 以字母o作为分割符
"boo:and:foo".split("o", -2);
// 函数看到 limit 为负数,则会尽全力匹配,当调用者自己不知道要匹配多少次的时候,填个负数很管用
// 结果:
{ "b", "", ":and:f", "", "" }
值得一提的是,字符串foo 用o 分隔出了3个 0长度的字符串
f|o|o|
虽然是3个,但是最后一个视为整个字符串的结尾,也就不会加入结果集。
常用的方法都是 limit == 0,解决了什么问题
{ "b", "", ":and:f", "", "" }
如果认为以上的输出比较啰嗦,想把末尾的 0长度的字符串 移出去,只需要让 limit == 0,得到的结果即为
{ "b", "", ":and:f" }

本文详细解读了Java String的split方法中,特别是split(regex, limit)的第二个参数如何控制返回数组的长度。重点讲解了limit的不同取值对结果的影响,包括限制匹配次数、不限制但排除空字符串等场景的应用实例。
735

被折叠的 条评论
为什么被折叠?



