2015-08-05 7 views

ответ

5

В lookarounds должны быть немного более напористым , что означает, что внешний вид должен утверждать, что следующая позиция является либо символом слова, либо не #, и в lookahead необходимо утверждать, что предыдущая позиция является либо символом слова, либо а не #.

Вы можете использовать word boundaries в каждом чередовании:

String s = "#stack###over##flow"; 
String[] a = s.split("(?<=#\\b)|(?=\\b#)"); 
System.out.println(Arrays.toString(a)); //=> [#, stack, ###, over, ##, flow] 

Или изменить ваши lookaround утверждения (более подход):

String[] a = s.split("(?<=#(?!#))|(?<=[^#](?=#))"); 
+0

На самом деле, вы могли бы разделить его на '\ b' (как это сделано в другой ответ) – nhahtdh

+0

@nhahtdh, Да я на самом деле понял, что после этого. Недостаточно кофеина. – hwnd

2

Я думаю, что есть гораздо более приятный способ ..

Выглядит ненормально:

\b 

Regex live here.

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