簡體   English   中英

正則表達式拆分字符串

[英]Splitting String by Regex

我在這里有這個字符串: M412 Rex | -HEADSHOT- M412 Rex | -HEADSHOT- 我想把它拆分為| 獲取名字,但我的代碼沒有按預期工作。

        System.out.println("weaponPart = " + weaponPart);
        String[] weaponPartParts = weaponPart.split(" | ");
        for (String s : weaponPartParts) {
            System.out.println("s = " + s);
        }
        System.out.println();

打印出來:

weaponPart = M412 Rex | -HEADSHOT-
s = M412
s = Rex
s = |
s = -HEADSHOT-

我假設它與正則表達式匹配有關,但實際上是怎么回事?

你必須雙重逃避| 這是正則表達式中的特殊字符: \\\\|

. 換句話說,您的實際模式意味着

因此,好的方針是:

String[] weaponPartParts = weaponPart.split(" \\| ");

作為旁邊評論這些特殊字符\\ | ( ) [ { ^ $ * + ? . \\ | ( ) [ { ^ $ * + ? . 是“臟打”。

用戶\\\\| 而不是|

更改

String[] weaponPartParts = weaponPart.split("|");

String[] weaponPartParts = weaponPart.split("\\|");

您還可以使用Pattern.quote方法來轉義任何特殊字符:

String[] weaponPartParts = weaponPart.split(Pattern.quote(" | "));

來自Java文檔

此方法生成一個String,該String可用於創建與字符串s匹配的Pattern,就好像它是文字模式一樣。

輸入序列中的元字符或轉義序列將沒有特殊含義。

你需要逃避|,我的意思是..

String[] weaponPartParts = weaponPart.split(" \\| ");
String weaponPart = "M412 Rex | -HEADSHOT-";
System.out.println("First Name::"+weaponPart.split("\\|")[0]);

暫無
暫無

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

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