Regex "[ |!|,|\\?|\\.|_|'|@|]+"
является посторонним.
Не разделяйте символы в классе символов [ ]
шаблоном |
OR , поскольку этот шаблон применяется только за пределами класса символов.
Нет необходимости экранировать ?
и .
в классе символов, поскольку они не являются специальными символами. .
Правильное регулярное выражение будет [ !,?._'@]+
или [^A-Za-z]+
.
Основная проблема с кодом в вопросе заключается в том, что split()
может возвращать массив, в котором первым элементом является пустая строка.
Пример 1: Ввод ",X,"
будет возврат ["", "X"]
. Пустая строка перед начальным ,
включается, а пустая строка после конечного ,
исключается, потому что javado c говорит, что так : " Таким образом, завершающие пустые строки не включаются в результирующий массив ".
Пример 2: Input ""
вернет [""]
, потому что javado c явно говорит об этом : «Если выражение не соответствует какой-либо части ввода, то результирующий массив имеет только один элемент, а именно эту строку» . Обратите внимание, что правило «конечной пустой строки» не применяется к этому конкретному варианту использования c.
Пример 3: Input ",,"
вернет []
, потому что конечные пустые строки исключены.
В примерах 1 и 2 эту начальную пустую строку следует игнорировать.
Я оставлю фактическое исправление кода вам, поскольку это равно ваша задача, которую нужно решить.