正则表达式拆分字符串

时间:2013-11-16 19:58:09

标签: java regex

我在这里有这个字符串: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-

我认为它与正则表达式匹配有关,但实际上是怎么回事?

5 个答案:

答案 0 :(得分:4)

您必须双重转义正则表达式|中的特殊字符\\|(表示“或”)

换句话说,您的实际模式意味着当您找到空格或空格时“分开”

因此,好的路线是:

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

作为旁注,这些特殊字符\ | ( ) [ { ^ $ * + ? .是“Dirty Dozen”。

答案 1 :(得分:2)

用户\\|代替|

更改

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

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

答案 2 :(得分:2)

您还可以使用Pattern.quote方法转义任何特殊字符:

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

来自 Java docs

  

此方法生成一个可用于创建Pattern的String   这将匹配字符串s,就好像它是一个文字模式。

     

将给出输入序列中的元字符或转义序列   没有特别的意义。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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