先看下面的方法,事先**一下,經過split方法,按逗號進行分割為陣列之後,生成的陣列的長度是多少,目測很多人都覺得是8,但是結果卻出乎意料。是5而不是8.
private static void testsplit() }
然後就是正兒八經的執行結果圖:
可以看到,結果真的是5而不是我們猜的8,這是為什麼呢?
原因解析:
點進去看原始碼,debug一下,如下圖:
可以看到,剛剛開始的時候,確實是有0-7,8個分割出來的東西存在,有三個是空字串,""。不是null。不用擔心空指標異常。
然後 看到下面的繼續走,if語句,就看到,他把這個list從尾部開始判斷,如果這個list的後面的字串的長度是0,那麼這個resultsize就 減減,然後一直while迴圈,
直到不符合條件,那麼list的下標是5、6、7的值就被拋棄了,然後新生的結果字串陣列,的大小就變成加工過後的長度,那麼就變成了長度 5的陣列。
list.sublist(0, resultsize).toarray(result)
就是這句話啦。
他只是處理後面尾部的空字串,不處理中間的空字串和 開頭的空字串。
知道這個原理之後,那麼這個 問題以後怎麼變,你都了然於胸啦。
下面是又更新的
(2017/07/13更新)
現在要求字串
"aa12sas32sasa223sas12as12wqe"//去掉數字,然後弄成陣列
"aa,,sas,,sasa,,,,sasas,,,"//去掉逗號,不管幾個逗號,都去掉
"aa sas sa sa sas as "//去掉空格,也不管幾個,
把他們給分解成陣列,同時刨除掉不用的多餘資訊。
具體實現**如下:
private static void testsplitplus()
下面再看看這個split的原始碼。
public string split(string regex)
不知道你看到沒,那個regex,不就是正規表示式的意思嘛?
那就明白了,這個方法是支援正規表示式操作的。那上面的**就好解釋啦。
第乙個[\\d]+這個解釋就是\\是轉義符,d表示數字,括起來後面的加號表示乙個或者多個,那麼就可以解釋執行結果啦。
第二個[,]解釋類似,就是逗號出現一次或多次,
第三個,\\s,就是匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。
然後下面,看執行結果。
c 中字串split函式
寫這個只是用來記憶一下,時至今日才發現c 的cstring類中已經有了字串分split的函式,自己一直沒有發現,羞愧難當,不過還好我是乙個知恥後勇的人,既然今天發現了,那就記下來。cstring中有乙個strtok s函式,它是乙個分割字串安全函式,其函式原型如下 char strtok s cha...
split分割字串
string tmp weekcode.split new char string yr tmp 0 string wk tmp 1 string tmp regex.split eachl,error regexoptions.ignorecase 用字串來分割 error 把 以 error 為...
split(字串方法)
用於把乙個字串分割成字串陣列。返回值 乙個字串陣列,不包括 sep 自身 引數 string.split sep,many sep必需。字串或正規表示式,從該引數指定的地方分割 stringobject。many 可選。該引數可指定返回的陣列的最大長度。如果設定了該引數,返回的子串不會多於這個引數指...