1. 程式人生 > >字串處理擷取slice、substring、substr的異同

字串處理擷取slice、substring、substr的異同

  在專案開發過中,字串是一種很特殊的東西,不可逃避地要經常對其處理,擷取獲得某幾個字元是一種經常的事情。然而,在面試題中也經常出現對字串處理的一些問題,尤其一些大公司,比如:慧*網,最近看其面試題中就有一道:說一下falsh程式設計中slice()、substring()、substr()的相同點和不同點?

  分析該題,其實並不難,但很基礎,很多人都用過這三個方法,但都是基於js的,至於falsh程式設計,由於其as也是基於ECMA262標準的指令碼語言,所以沒什麼不同。

  相同點:三個方法都是擷取字串中的子字串,並返回子字串,對原字串不修改。三個方法都可以接收兩個引數,第一個引數是子字串的開始索引,第二個引數則有所區別。如果省略第二個引數則會擷取到字串的結尾。另外三個方法還都可以接收負數的引數,此時則是它們最大的區別之處。

  不同點:slice()和substring()接收的第二個引數表示子字串的結束索引的後面的字元索引,可以理解不包括該索引的子字串。substr()的第二個引數則表示擷取的字串的長度。

  在引數為負數時,slice()則會把引數中無論一個負數還是兩個負數,按字串.length與該負數相加的方式轉換為正數,然後再根據正數的方式,從開始索引到結束索引(不包含)的方式擷取子字串,如果轉換後的負數還是負數不會繼續進行轉換。

var str="abcdef";

console.log(str.slice(0));//abcdef

console.log(str.slice(0,3));//abc

console.log(str.slice(-4,3));//c

console.log(str.slice(-3,-1));//擷取(6-3, 6-1),得到de

console.log(str.slice(-10,6));//"abcdef",6-10=-4到6,得到abcdef

  substring()方法在引數為正數時與slice()沒有什麼區別,唯一的一個特點就是當第二個引數小於第一個引數時,它會把小的引數當作第一個擷取的開始索引,大的引數當作結束位置索引(不包含該位置的字元),引數為負數時自動歸0。

var str="abcdef";

console.log(str.substring(6,0));//會自動翻轉,得到0到6之間的字元abcde

  引數是負數時,則把負引數歸為0

console.log(str.substring(-100,3));//計算得到0到3之間的字元abc

console.log(str.substring(-1,-9));//0到0之間的字元“”

  substr()方法在引數為負數時,第一個引數如果為負數,則按字串.length+第一個引數的方式轉換為正數,如果第二個引數為負數則歸為0。

var str="abcdef";

console.log(str.substr(-6,-100));//從0開始擷取0個字元得到“”

console.log(str.substr(-6));//從0開始到結束得到abcdef

  至此三個方法的異同點總結完畢。