為什麼寫這篇部落格??
在字串處理過程中經常會用到split
函式將字串分割成字串陣列。但是因為這個東西拿過來直接用就行很方便,但是經常出錯因為不知道細節往往不好查錯。於是乎今天好好讀了這個原始碼,想把自己的理解分享一下同時有些沒大看懂的地方需要高人指點。
先上原始碼:
string類的public string split(string regex, int limit) else
}// if no match was found, return this
if (off == 0)
return new string;
// add remaining segment
if (!limited || list.size() < limit)
list.add(substring(off, value.length));
// construct result
int resultsize = list.size();
if (limit == 0)
}string result = new string[resultsize];
return list.sublist(0, resultsize).toarray(result);
}return pattern.compile(regex).split(this, limit);
}
value
成員為對應的底層字元陣列。
indexof(
int start,char ch
)函式功能是從
start
開始找到第乙個出現字元
ch的位置並返回如果找不到則返回
-1.
由於看到頭有點疼最後乙個return
呼叫的函式沒細看所以這裡不做介紹。
首先介紹下split(string regex,int limit)
的功能(這裡只考慮滿足最外層也就是第乙個
if條件的情況)如果
limit為0
,此時用
regex
的最後乙個字元把字串分開。如下圖所示:
函式呼叫為split(「,」,0);結果為
四個元素 明明畫了
5個箭頭為什麼四個元素呢這是因為最後會把末尾的空串去掉。
如果limit>0
的時候這時候就有點意思了。。
比如說limit=2,
即split(「,」,2);
是的此時空串是一部分其它的是一部分因為此時得到的陣列最多只能有兩個元素。有點偏離主題了好像沒怎麼介紹原始碼,原始碼好像大家都能看明白講了也沒意思。但是還是想分享一件個人感覺挺漂亮的東西,就是在判斷字元ch
不是數字字元時這裡沒有用
ch』9』而是用的(ch-』0』)|(『9』-ch)<0(此時不是數字字元),
這裡用到的位操作只要不是數字字元兩者肯定有個小於0
的,當有乙個為負數時做或運算肯定為負,這個小技巧還是蠻不錯的。
對於這個character.min_high_surrogate 貌似是有unicode編碼有關係的,與之相關的詳細資訊沒找到,有了解這個的個人麻煩指點一下。
split 函式實現
split函式實現 ss axx bv ctt dff result def split 1 ss,a,times len ss i 0n 0 while len ss 0 and iand nif ss i i len a a print i i print 之前的ss ss print resu...
oracle實現split函式
oracle資料庫中某乙個字段可能存在以某些特殊符號隔開的字段,我們在查詢使用的時候往往需要將這些欄位spilt開 但是oracle沒有這個函式,網上搜尋了一下,找了乙個可以使用的函式 下面直接上指令碼 1.先建立乙個type create or replace type obj target as...
c 實現split函式
今天工作因原因,需要實現乙個split的功能,以前也做過,但一直沒有把他記下來,所以又重新寫了一次。這次做個筆記以備後用,各位感興趣也可以直接拿來用過。例子 乙個這樣的字串 123,456,789,0 把他擷取成這樣的字串陣列 123 456 789 0 眾所周知c 預設沒有提供這樣功能的函式,下面...