對String類的split方法的一點點研究

2021-08-03 22:30:57 字數 1307 閱讀 1501

今天在複習正規表示式的時候,遇到了乙個小問題,話不多說,先貼上**

當我在用string類的split()方法對str1進行分割的時候,然後在控制台輸出,輸出結果如下:

意思就是"123a345b"呼叫split方法後返回的string陣列中有7個元素,並且當中含有五個空元素,a元素之前拆出了3個空元素,而a和b之間被拆出了2個空元素,那麼問題來了,為什麼會出現這種情況呢?

於是我去研究了一下源**,**如下:

當**執行str1.split("\\d"),會自動呼叫上述方法,此時limit預設為0,在這個方法中最主要的就是乙個條件語句,上面的源**中紅色框選的就是if條件語句的判斷條件,該判斷語句的作用是:判斷呼叫方法時傳入的正規表示式是否符合條件,條件的大概意思是:長度為1的正規表示式(通常為單個字元)或者長度為2的正規表示式(通常為轉義正規表示式),我給的例子中的"\\d"就是長度為2的轉義正規表示式,總之這裡判斷為true,注意:此時ch已經變成了regex,也就是代表乙個數字的ch。然後執行條件語句中的**塊,**如下:

由於limit為0,此時limited為true,然後執行下面的迴圈體,迴圈體中首先判斷迴圈條件:將str1中每乙個符合"\\d」的字元的下標賦值給next,下面是我畫的一張完整的迴圈表:

當迴圈體執行6次之後,迴圈體條件將不再滿足,於是跳出迴圈體,此時list集合中含有上面的六個元素,off變為了7,然後會執行下面的第一部分**,第一部分**的作用就是將整個字串剩餘的部分拆分為最後乙個元素,也就是上述的"b"元素,至此,完美解釋了開頭的問題。那麼下圖中的第二部分**又是什麼意思呢?其實如果我們string中繼續含有數字的話,會繼續拆分乙個個空格,那麼此時第二部分的**就會發揮作用,將拆分後string陣列中末端的所有空格去除,也就是字串末尾若連續匹配,則所有拆分出來的空字串會被忽略的原因。

String類的split方法

雖然使用正規表示式能很好的進行字串的解析 提取 替換,但是對於一些簡單的應用,使用 string 類提供的一些方法就可以很好的完成,最突出的就是 split 方法。split 方法能夠很方便的將字串按照一定的規則拆分開。比如對於下面的字串 tom,jane,tony,elva,gigi 只要呼叫如下...

PYTHON中String類的split 方法

split 拆分字串。通過指定分隔符對字串進行切片,並返回分割後的字串列表 list os.path.split 按照路徑將檔名和路徑分割開 函式說明 split 函式 語法 str.split str num string.count str n 引數說明 str 表示為分隔符,預設為空格,但是不...

String類中split方法

string類中split方法 split 你需要分割字串的,分割的總個數 該方法使用正規表示式的底層完成對字串的分割 使用的案例 1 string s women,sksk,k,k,k,k,3 23 4for string s1 s.split 7 該執行結果是 women skskkk kk注意...