作者AmosYang (LetMeGoogleThatForYou)
看板java
标题Re: [问题] String.split
时间Mon Jul 5 08:20:22 2010
※ 引述《AmosYang (LetMeGoogleThatForYou)》之铭言:
: ※ 引述《jlovet ( )》之铭言:
: : → jlovet:你这麽厉害为什麽不要解释一下为什麽会有空白 07/05 05:04
: javadoc 已经写得很清楚,提供了足够的资讯给想追根究底的人
: java.* 下的 source code 也已经开出来给你看
: 有那个时间呛不如脚踏实地作学问
: → jlovet:是,你说的对,javadoc的确有说他为什麽跟其他语言都要做不 07/05 06:13
: → jlovet:一样,是我没有看清楚,不好意思 07/05 06:15
与其比较 "切字串" 各种不同的 implementation, 不如再想深一层,从语意上来想
以「用 non-empty 字串来切另一个字串」的实作为例
大多数人很简单的就可以达成一个共识
是故 ":".split(":") 传回两个空字串也不觉得奇怪
然而,「用空字串来切另一个字串」有许多不同的解释
我觉得「用空字串来切另一个字串」有一种用零去除另一个数字的感觉,是故应该 throw
你预期「用空字串来切另一个字串」应该把整个字串切开,传回一连串长度为1的字串
(我猜你的想法是: "ABC" 可视为 "A", "", "B", "", "C")
可能有人在修 automata/computability ,从「任一字串是否包含唯一或无限多
的空字串」开始想,最後在路上被车撞 XD (
http://xkcd.com/356/ )
(这种人可能会想: 事实上 "ABC" 可视为
"", "", ..., "A", "", "", ..., "B", "", "", ..., "C", "", "", ...)
而当初写 java String.split() 的人大概是想:
赣! 没时间了,让写 Pattern.split() 的人去伤这个脑筋吧
是故,要回答「为什麽传回来的第一个字串是空字串?」很简单,
因为程式码就是那样写的
若要回答「为什麽 split() 要写成这样?」或
「要怎麽定义“用空字串来切另一个字串”?」
…到最後真的只能像岸和田博士说的:「不要怀疑」 XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 65.87.177.87
※ 编辑: AmosYang 来自: 65.87.177.87 (07/05 08:39)