2013-11-16 5 views
2

У меня есть эта строка здесь: 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

The '| 'является специальным символом регулярного выражения. Вы пробовали '' \\ | "'? – jCoder

ответ

4

Вы должны удвоить escape-код |, который является специальным символом в регулярном выражении: \\|. (Это означает, что «ИЛИ»)

Другими словами, фактическая картина означает «раскол, когда вы нашли место или пространство».

Таким образом, хорошая линия:

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

Как в стороне комментарии эти специальные символы \ | () [ {^$ * + ? . являются "Dirty Dozen".

2

Пользователь \\| вместо |

Изменить

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

в

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

Вам нужно бежать |, что я имею в виду ..

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

Вы можете также с помощью метода Pattern.quote, чтобы избежать каких-либо специальных символов:

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

От Java docs:

Этот метод создает строку, которая может быть использована для создания паттерна который будет соответствовать строке s, как если бы это был буквенный шаблон.

Метасимволы или escape-последовательности во входной последовательности будут даны без специального значения.

Смежные вопросы