暈死,總感覺這兩個東西的用法差不多。可最近發現太TM菜了,決定看下具體api。api中描述很清楚。
Java substring(beginIndex,endIndex); 返回一個新字符串,它是此字符串的一個子字符串。該子字符串從指定的beginIndex
處開始,直到索引 endIndex - 1
處的字符。因此,該子字符串的長度為 endIndex-beginIndex
。注:java中下標從0開始。
Oracle substr(str,beginIndex,endIndex)
這是Oracle中截字符串操作,有三個參數。第一個是要處理的字符串,第二個是字符串的開始位置,第三個是要截取的長度。注:下標從1開始
延伸:
Oralce中還有substrb方法。它的用法、參數個數、參數含義與substr完全相同。區別是:substrb是按字節來算的,二substr是按漢字來算的。如:
select substr('我們都是好孩子',3,4) from dual; 返回:"都是好孩"
select substrb('我們都是好孩子',3,4) from dual; 返回:"們都"
select substrb('我們都是好孩子',4,4) from dual; 返回:" 都 "
結論:substrb,對漢字處理時,當恰好取到一個漢字的開始位(漢字占兩位),則取該漢字,否則忽略此漢字,用單空格替代;到末尾時,恰好取到一個漢字的結束位,則取該漢字,否則用空格替代。
如上例中第二個,3恰好取到“們‘的開始位,向後取四位,即第6,恰好又是”都“的結束位。所以返回值為”們都“。
而上例中第三個,4恰好取到“們‘的結束位位,忽略該漢字,用空格取代。向後取四位,即第7,恰好又是”都“的開始位,也用空格取代。所以返回值為” 都 “。
而在處理英文字符串時,這兩個則完全相同。