簡體   English   中英

java split()究竟如何工作?

[英]How java split() exactly works?

為什么在java中使用split()的工作方式不同? 我想分割一個這樣的版本字符串:1.2.3.4但是如果我喜歡這樣:將得到一個空數組,如果我使用split("\\\\.") ,它就像我期望的那樣工作:

        String version1 = "1.2.3.4.5";
        String version2 = "1.2.3.4.5.6";
        String[] v1Arr = version1.split("."); 
        String[] v2Arr = version2.split("\\."); 
        System.out.println(Arrays.toString(v1Arr)); // [] why?
        System.out.println(Arrays.toString(v2Arr)); // [1, 2, 3, 4, 5, 6]


String version1 = "1-2-3-4-5";
String version2 = "1-2-3-4-5-6";
String[] v1Arr = version1.split("-");
String[] v2Arr = version2.split("\\-");

System.out.println(Arrays.toString(v1Arr)); // [1, 2, 3, 4, 5]
System.out.println(Arrays.toString(v2Arr)); // [1, 2, 3, 4, 5, 6]

如果我改變“。” “ - ”都按預期工作,為什么會這樣? 先感謝您!

. 是正則表達式中的特殊模式標記。 它匹配任何一個字符。 當你拆分每個可能的角色時,你得到一個空數組(因為沒有任何東西)。 相比之下,當你逃脫時. \\\\. 令牌呈現為文字(並且僅匹配文字. )。

\\被稱為轉義字符和。 dot被解釋為轉義字符,因此您無法直接使用點來拆分字符串

這就是為什么你必須使用\\作為帶點的轉義字符,在字符串中表示為點

作為@Elliott Frisch答案的替代方法,您也可以拆分正則表達式字符類中包含的一個或多個字符。 請考慮以下代碼段:

String version = "1.2.3.4.5.6";
String[] parts = version.split("[.]");

方括號告訴正則表達式引擎將內部任何內容視為文字字符,在本例中為文字點。 當嘗試拆分多個字符時,這種方法可能更有用,其中許多字符可能是元字符。 使用括號表示法,我們不必擔心特殊的轉義語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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