[英]How exactly does String.split() method in Java work when regex is provided?
我正在准備OCPJP考試,我遇到了以下示例:
class Test {
public static void main(String args[]) {
String test = "I am preparing for OCPJP";
String[] tokens = test.split("\\S");
System.out.println(tokens.length);
}
}
這段代碼打印16.我期待像no_of_characters + 1這樣的東西。有人可以解釋一下,split()方法在這種情況下實際上做了什么? 我只是不明白......
它在正則表達式引擎代表\\S
非空白字符的每個"\\\\S"
上分裂。
所以讓我們嘗試在非空格( \\S
)上拆分"xx"
。 由於此正則表達式可以用一個字符匹配允許在它們之間迭代,以紀念分裂的地方(我們將使用管道|
為該)。
'x'
非空白? YES,所以讓我們將其標記| x
| x
' '
非空白? 不,所以我們保持原樣 'x'
非空白? YES,所以讓我們將其標記| |
| |
因此,我們需要在開始和結束時拆分我們的字符串,最初給出結果數組
["", " ", ""]
^ ^ - here we split
但是由於尾隨空字符串被刪除,結果將是
[""," "] <- result
,""] <- removed trailing empty string
所以split返回array ["", " "]
,它只包含兩個元素。
BTW。 要關閉刪除最后一個空字符串,您需要使用split(regex,limit)
和split(regex,limit)
負值,如split("\\\\S",-1)
。
現在讓我們回到你的例子。 如果您的數據是分裂的每一個
I am preparing for OCPJP
| || ||||||||| ||| |||||
意思是
""|" "|""|" "|""|""|""|""|""|""|""|""|" "|""|""|" "|""|""|""|""|""
所以這代表了這個數組
[""," ",""," ","","","","","","","",""," ","",""," ","","","","",""]
但由於尾隨空字符串""
被刪除(如果它們的存在是由分裂引起的 - 更多信息在: 混淆String.split的輸出 )
[""," ",""," ","","","","","","","",""," ","",""," ","","","","",""]
^^ ^^ ^^ ^^ ^^
你得到的結果數組只包含這部分:
[""," ",""," ","","","","","","","",""," ","",""," "]
這正好是16個元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.