簡體   English   中英

當提供正則表達式時,Java中的String.split()方法究竟是如何工作的?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM