关于split(String regex,int limit)方法在分割字符串时返回的数组的规则问题

关于split(String regex,int limit)方法在分割字符串时返回的数组的规则问题

在官方的API文档中,针对public String[] split(String regex,int limit)方法给出了如下的例子:

The string "boo:and:foo", for example, yields the following results with these parameters:


Regex  Limit                  Result

:             2              { "boo", "and:foo" }    

:             5              { "boo", "and", "foo" }    

:            -2              { "boo", "and", "foo" }    

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

o           -2             { "b", "", ":and:f", "", "" }    

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

请问老师问什么字符串"boo:and:foo"当以英文字母o分割时,且limit非零时,前面两个oo作为分割符分出来了一个“”空字符串,而后面两个oo为什么分出来两个“”空字符串啊?

正在回答

登陆购买课程后可参与讨论,去登陆

5回答

同学你好,不要着急哦~解决问题也是学习的过程哦~

第二步and:f左右边都不加双引号哦~

现在老师进行分步,讲解:

1、首先将整个字符串"boo:and:foo",进行拆分,o转换为“”空字符串,具体如下:

http://img1.sycdn.imooc.com//climg/5dc61b86093fe8bb04230213.jpg

2、然后将转换后的字符串,每个双引号中的一个引号从前到后,两两配对,也就是最开始b前面的那一个引号“ 与第一个o转换为双引号的第一个引号,进行配对,依次类推,具体如下:

http://img1.sycdn.imooc.com//climg/5dc61cf909ce7cd605130253.jpg

因为第一个o的第一个引号,与前面的b链接,第二个o的最后一个引号,与:and:f最后的引号,进行拼接,所以中间剩余一个“”空字符串。

而f后面的两个o,f后面的第一个o转换的双引号“”,中的第一个引号,与:and:f的内容进行配对,则第二个引号与f后面的第二个o转换的双引号的第一个一个引号进行配对,f后面的第二个o最后一个引号,再与整个"boo:and:foo"字符串的最后一个引号进行配对,所以是两个双引号。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • qq_旧安_0 提问者 #1
    好的,谢谢老师的耐心答复,这下理解啦
    2019-11-09 15:34:05
好帮手慕酷酷 2019-11-08 19:32:11

同学你好,这里老师前两个oo转化的是两个空!同学可以根据红色与红色框对应和绿色箭头和绿色框对应理解哦~

具体如下:

http://img1.sycdn.imooc.com//climg/5dc618fb09838cdf05280523.jpg

建议同学手动实现以下,理解的更透彻。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 qq_旧安_0 #1
    。。。。老师您第二步b的右边跟:and:f左边都不加双引号的吗。。。。。,它们俩不是单独的字符串吗。。。。,还有一直都是那个问题啊老师,为啥前面两个空到第三步就合成一个了,而后面两空到第三步还是两个空啊?(我动手实践了老师,就是这个点不理解才一直问您,欲哭无泪.jpg)
    2019-11-08 19:50:44
好帮手慕酷酷 2019-11-08 18:40:03

同学你好,可以这样理解,o进行分割后,相当于这个位置为空,也就是String ss = "b " " " " :and:f" "" "";然后编译器会将字符串使用+号进行连接,也就变成 String ss = "b "+ " "+ " :and:f"+ ""+ "";

具体如下:

http://img1.sycdn.imooc.com//climg/5dc5457a09a83ee004880462.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 qq_旧安_0 #1
    老师还是最开始的那个问题,为什么用o进行分割后,第一个oo不是俩o吗,为啥只有一个空,而后面两oo就变成了两个空?就这点不明白,别的都理解了
    2019-11-08 18:55:03
  • 好帮手慕酷酷 回复 提问者 qq_旧安_0 #2
    同学你好,同学参考一下老师上面画的图!两个o会转化为两个空,然后使用加号+进行拼接后,就变成了一个空!如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-11-08 19:06:46
  • 提问者 qq_旧安_0 回复 好帮手慕酷酷 #3
    老师您好,您上面那个图上第二步转化的时候前两个oo就是写的一个空啊,然后后两个oo您才写的是两个空。并且既然两个空用加号拼接后会成为一个空,为什么后两个空用加号拼接后还是两个空啊?
    2019-11-08 19:16:03
好帮手慕酷酷 2019-11-08 16:49:46

同学你好,同学的例子中,是根据匹配给定的正则表达式o来拆分此字符串,

limit 参数通过控制分割次数从而影响分割结果 
如果传入 n(n>0) 那么字符串最多被分割 n-1 次,分割得到数组长度最大是 n 
如果 n <0 将会以最大分割次数分割 
如果 n = 0 将会以最大分割次数分割,但是分割结果会舍弃末位的空串

这里可以这样理解:

boo:and:foo 这个字符串用"o" 分隔的话,在字符串中出现的“o ”的位置之间都要使用空字符串进行分割“”,可以看成由这么几个字符串组成的:

"b" "o" "" "o" ":and:f" "o" "" "o" ""

最后一个""主要是因为到字符串结尾了,字符串分隔的话最后是有一个元素的,所以split添加了一个空字符串。

所以limit>0,还是小于0,将o拆分后,就是{ "b", "", ":and:f", "", "" }    而limit=0,会舍弃末位的空串,所以为{ "b", "", ":and:f" }   

 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 qq_旧安_0 #1
    老师这里还是不太理解: boo:and:foo 这个字符串用"o" 分隔的话,在字符串中出现的“o ”的位置之间都要使用空字符串进行分割“”,可以看成由这么几个字符串组成的: "b" "o" "" "o" ":and:f" "o" "" "o" "" 为什么两个o(即oo)之间出现的位置要加一个空字符串?而最后那个oo不应该是"o","","o"吗?为什么是"o","","o","" ?
    2019-11-08 17:08:48
好帮手慕酷酷 2019-11-08 16:03:03

同学你好,关于这个方法是通过正则表达式的方式进行拆分字符串,关于正则表达式,同学目前不需要了解哦~在我们课程的第二阶段,会有详细的讲解哦。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 qq_旧安_0 #1
    不是老师我是问为什么同样是o,前面的拆分效果为什么和后面的不一样呢?
    2019-11-08 16:10:23
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师