Re: [問題] String.split
看板java作者AmosYang (LetMeGoogleThatForYou)時間15年前 (2010/07/05 08:20)推噓0(0推 0噓 0→)留言0則, 0人參與討論串3/3 (看更多)
※ 引述《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)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):