Java中字串split 的使用方法

2021-09-02 20:12:01 字數 1456 閱讀 3374

先看下面的方法,事先**一下,經過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 可選。該引數可指定返回的陣列的最大長度。如果設定了該引數,返回的子串不會多於這個引數指...