【Java】 String.split 归纳

41 篇文章 4 订阅
23 篇文章 2 订阅

前言

  • 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的子串来源于strregex 匹配的字符串分割。
      • 形如 "1,2,3,4".split(",") 会被分割为 ["1","2","3","4"]
      • 如果input没有匹配到任何值,即"1234".split(","),返回值为["1234"]
  • 返回值的数组中可以存在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", "", "" }

值得一提的是,字符串fooo 分隔出了3个 0长度的字符串

f|o|o|

虽然是3个,但是最后一个视为整个字符串的结尾,也就不会加入结果集。

常用的方法都是 limit == 0,解决了什么问题

{ "b", "", ":and:f", "", "" }

如果认为以上的输出比较啰嗦,想把末尾的 0长度的字符串 移出去,只需要让 limit == 0,得到的结果即为

{ "b", "", ":and:f" }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值