Шаблон может соответствовать всей строке. split()
не возвращает совпадение, только то, что находится между ними. Поскольку шаблон соответствует всей строке, остается только пустая строка для возврата. Я думаю, что у вас может быть неправильное представление о том, что делает split()
.
Например:
String qs = "param/value/param/value";
String pieces = qs.split("/");
вернет массив из 4 элементов: параметр, значение, параметр, значение.
Обратите внимание, что то, что вы ищете ("/"), не возвращается.
Ваше регулярное выражение несколько сложнее. Во-первых, вы используете {1}
, что не нужно. Во-вторых, когда вы делаете ([a-z])+
, вы захватываете ровно одну последнюю (последнюю найденную. Сравните это с ([a-z]+)
, которая захватит весь матч. Кроме того, вам даже не нужно захватывать для этого. быть упрощенным до:
protected Pattern regEx = Pattern.compile("[a-z]+/([a-z0-9]+/?)*");
Технически это:
protected Pattern regEx = "(([a-z])+/{1}([a-z0-9])+/?)*";
- это ошибка компилятора, поэтому то, что вы действительно использовали по сравнению с тем, что вы опубликовали, может быть чем угодно.