我在这里有这个字符串: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-
我认为它与正则表达式匹配有关,但实际上是怎么回事?
答案 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]);