2015-03-01 3 views
0

Мне нужно разбить строку в java с помощью регулярного выражения, но я не совсем уверен, как это сделать. Я должен разделитьJava split string by regex

[Caps][RCaps]C[Caps][RCaps]atalog[Caps][RCaps] 

К слову в квадратных скобках. Мне как-то нужно получить все части строки.

Ожидаемый результат:

[Caps] 
[RCaps] 
C 
[Caps] 
[RCaps] 
atalog 
[Caps] 
[RCaps] 

И текст в квадратных скобках может быть что угодно. В этом случае это «Шапки» и «RCaps», но это может быть также «Картофель», например

+1

Ум, показавший нам некоторый код? Без этого вам не поможет. –

+0

Другими словами, вы хотите разделить 'after'' 'или' 'перед ['? Так в чем проблема с вашим кодом? – Pshemo

ответ

3

Что вам нужно сделать, это разделить как перед [ характер и после ] характера, Th переводит в regex (?=\\[)|(?<=\\]).

Пример:

String string = "[Caps][RCaps]C[Caps][RCaps]atalog[Caps][RCaps]"; 
String[] result = string.split("(?=\\[)|(?<=\\])"); 
System.out.println(Arrays.toString(result)); 

Печатается:

[[Caps], [RCaps], C, [Caps], [RCaps], atalog, [Caps], [RCaps]] 
+0

Ничего себе, ниндзя. Как вы компилируете регулярное выражение в голове? – Shahar

+2

Примечание: перед Java 8 результат будет содержать пустое пространство как первый элемент массива. –

+0

@Shahar Что значит? Это решение является первым делом, которое приходит на ум после того, как увидит, что OP хочет разделиться после '' '' (? <= \\]) 'или (' | ') до' ['' (? = \\ [) '? – Pshemo

1

"[" или "]" являются символами соответствия регулярных выражений, называемыми метасимволами. Перед этим нужно добавить escape-символ. \\[ или \\]

Вы должны попробовать что-то вроде этого:

String str = "[Caps][RCaps]C[Caps][RCaps]atalog[Caps][RCaps]"; 
Pattern pattern = Pattern.compile("\\[?(\\w)+\\]?"); 
Matcher matcher = pattern.matcher(str); 
while (matcher.find()) { 
    System.out.print(matcher.group()); 
} 

Выход:

[Caps] [RCaps] C [Caps] [RCaps] atalog [Caps] [RCaps]

+0

Они называются метасимволами. Btw OP хочет, чтобы скобки были частью вывода. – CKing

+0

Как вы знаете, что OP даже разбивается на любой из этих символов, не видя никакого кода? Я имею в виду, да, это очевидно, но все же ... –

+0

@RohitJain: Это казалось мне очевидным из его вопроса. Правило, отличное от метасимвола, похоже, прямолинейно. –

1

вместо раскола, вы можете использовать этот шаблон, чтобы захватить то, что вы хотите

(\[[^][]*\]|[^][]+) 

Demo

1

т это.

String string = "[Caps][RCaps]C[Caps][RCaps]atalog[Caps][RCaps]"; 
     String[] split = string.split("\\]"); 
     for (String string1 : split) { 
      if (string1.charAt(0) != '[') { 
       int indexOf = string1.indexOf("["); 
       String substring = string1.substring(0, indexOf); 
       String substring1 = string1.substring(indexOf, string1.length()) + "]"; 
       System.out.println(substring); 
       System.out.println(substring1); 
      } else { 
       System.out.println(string1 + "]"); 
      } 
     } 
+0

Это путь, я согласен, но я не согласен с тем, что он работает, я тестировал его, но использование подстрок снова и снова может быть немного неэффективным. Тем не менее, сам ответ хороший, и он может пригодиться для других целей;) – KiralyCraft

+0

должен быть какой-либо один разделитель или символ, чтобы его можно было разделить, из-за которого я использовал подстроку. – TechnoCrat

+1

Я понял, как твоя идея работает, и я просто проверил ее, это выглядит довольно быстро, и у меня уже есть другая идея, где это использовать;) – KiralyCraft