簡體   English   中英

Java用特殊字符分割

[英]Java split with special characters

我有下面的代碼使用<div>\\\\$\\\\$PZ\\\\$\\\\$</div>對字符串進行拆分,但使用特殊字符不起作用。

public class HelloWorld{

     public class HelloWorld{

     public static void main(String []args){
          String str = "test<div>\\$\\$PZ\\$\\$</div>test"; 
        String[] arrOfStr = str.split("<div>\\$\\$PZ\\$\\$</div>", 2); 
        for (String a : arrOfStr) 
            System.out.println(a);
     }
}

輸出 os test<div>\\$\\$PZ\\$\\$</div>test

當我刪除特殊字符時它起作用

你能幫忙嗎。

如您所知, split(...)的參數是一個正則表達式,因此某些字符具有特殊含義。 如果您希望參數按字面處理,即不作為正則表達式,請調用Pattern.quote(String s)方法。

例子

String str = "test<div>\\$\\$PZ\\$\\$</div>test";
String[] arrOfStr = str.split(Pattern.quote("<div>\\$\\$PZ\\$\\$</div>"), 2);
for (String a : arrOfStr)
    System.out.println(a);

輸出

test
test

quote()方法簡單地用正則表達式\\Q...\\E 引用模式1包圍文字文本,例如您的<div>\\$\\$PZ\\$\\$</div>文本變為:

\Q<div>\$\$PZ\$\$</div>\E

對於固定文本,您可以自己做,即以下 3 個版本都創建相同的正則表達式來拆分:

str.split(Pattern.quote("<div>\\$\\$PZ\\$\\$</div>"), 2)

str.split("\\Q<div>\\$\\$PZ\\$\\$</div>\\E", 2)

str.split("<div>\\\\\\$\\\\\\$PZ\\\\\\$\\\\\\$</div>", 2)

對我來說,使用\\轉義的第三個版本是最不可讀/最不受歡迎的版本。

如果有很多的特殊字符逃脫,使用\\Q...\\E比更容易\\分別-escaping所有的特殊字符,但很少有人使用它,所以它是相當不知道的最多。

當您需要逐字處理動態文本時,例如當要拆分的文本可由用戶配置時, quote()方法特別有用。

1) quote()將正確處理包含\\E文字文本。

這個:

String str = "test<div>\\$\\$PZ\\$\\$</div>test";
String[] arrOfStr = str.split("<div>\\\\\\$\\\\\\$PZ\\\\\\$\\\\\\$</div>", 2);
for (String a : arrOfStr) {
    System.out.println(a);
}

印刷:

test
test

編輯:為什么我們需要所有這些反斜杠? 這是因為我們需要如何處理表示正則表達式的字符串文字。 本頁舉例說明原因。 本質是這樣的:

對於反斜杠\\ ...

...匹配的模式將是\\\\ ...(逃避轉義)

...但是創建該模式的字符串文字必須有一個反斜杠來轉義兩個反斜杠中的每一個: \\\\\\\\

除此之外,還需要對$進行轉義,這在字符串表示中為我們提供了 6 個反斜杠。

暫無
暫無

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

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