Java 用正则表达式拆分字符串

Java 用正则表达式拆分字符串,java,regex,Java,Regex,这里有一个字符串:M412-Rex |-HEADSHOT-。我想在|上拆分它以获得名字,但是我的代码没有按预期工作 System.out.println("weaponPart = " + weaponPart); String[] weaponPartParts = weaponPart.split(" | "); for (String s : weaponPartParts) { System.out.println(

这里有一个字符串:
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("|");


你需要逃离|,我的意思是


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

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

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

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


是一个特殊的正则字符。您是否尝试过
“\\\\\”
String weaponPart = "M412 Rex | -HEADSHOT-";
System.out.println("First Name::"+weaponPart.split("\\|")[0]);
String[] weaponPartParts = weaponPart.split(Pattern.quote(" | "));