之前在無意中注意到字串的切割預設會將符號與符號間若是empty value,會自動省略該筆資料
,也就是說預計長度是n,最後卻是n-1。
以例子來說,假設我定義了一個class,成員變數key為其他成員變數ID、Name、Interest的組合
即 key = "A123::Ben::Baseball",當我split key時,正常會得到lenth = 3,但假設這個key interest是
空的,那麼split回傳回來的string array長度會得到2,也就是此array[2]不存在!當要讀取時會有
問題!
因此,若您要保留這筆empty value,需要使用split method帶進第二個參數
基本定義如:
public String[] split(String regex, int limit)
一、limit < 0
根據原始碼的split過程,假設要無條件的去得到含empty value的array,
可帶進小於0的value給limit
假設String sp_key[] = key.split("::", -1);
此時,就算key = "A123::Ben::",也會得到sp_key length = 3,sp_key[2] = ""
二、limit > 0
若limit > 0 ,即表示您切割後回傳想得到的資料筆數(若超過可切割的大小,即以最大的容
許值為主)
假設String sp_key[] = key.split("::", 2);
此時,key = "A123::Ben::",會得到sp_key length = 2
sp_key[0] = "A123";sp_key[1] = "Ben"
若String sp_key[] = key.split("::", 3);
則sp_key[2] = ""也會存在!
三、limit = 0
即一般的split用法(單一帶入regex的value),預設帶進來的即為0
總結:
根據原始碼的操作,limit = 0 與 limit < 0 都會切割得到所有的values(include empty value)
差別只在於若limit = 0 ,最後程式會再做一次construct的動作,相關片段程式如下:
# list裡面包含前面切割得到的資料
,也就是說預計長度是n,最後卻是n-1。
以例子來說,假設我定義了一個class,成員變數key為其他成員變數ID、Name、Interest的組合
即 key = "A123::Ben::Baseball",當我split key時,正常會得到lenth = 3,但假設這個key interest是
空的,那麼split回傳回來的string array長度會得到2,也就是此array[2]不存在!當要讀取時會有
問題!
因此,若您要保留這筆empty value,需要使用split method帶進第二個參數
基本定義如:
public String[] split(String regex, int limit)
一、limit < 0
根據原始碼的split過程,假設要無條件的去得到含empty value的array,
可帶進小於0的value給limit
假設String sp_key[] = key.split("::", -1);
此時,就算key = "A123::Ben::",也會得到sp_key length = 3,sp_key[2] = ""
二、limit > 0
若limit > 0 ,即表示您切割後回傳想得到的資料筆數(若超過可切割的大小,即以最大的容
許值為主)
假設String sp_key[] = key.split("::", 2);
此時,key = "A123::Ben::",會得到sp_key length = 2
sp_key[0] = "A123";sp_key[1] = "Ben"
若String sp_key[] = key.split("::", 3);
則sp_key[2] = ""也會存在!
三、limit = 0
即一般的split用法(單一帶入regex的value),預設帶進來的即為0
總結:
根據原始碼的操作,limit = 0 與 limit < 0 都會切割得到所有的values(include empty value)
差別只在於若limit = 0 ,最後程式會再做一次construct的動作,相關片段程式如下:
int resultSize = list.size();
if (limit == 0)
while (resultSize > 0 && list.get(resultSize - 1).length() == 0)
resultSize--;
String[] result = new String[resultSize];
# list裡面包含前面切割得到的資料
留言
張貼留言