Если вы ссылаетесь на пустые строки в выходных данных, это не пробелы , они пустые строки в массиве alpha
.
Поскольку вы регулярно проверяете соответствие только одному символу, операция split
создаст пустые записи, т. Е. plain split даст следующий массив:
{ "", "d", "", "", "", "", "s", "" }
Поскольку split
по умолчанию удаляет завершающие пустые строки, то, что вы на самом деле получаете:
{ "", "d", "", "", "", "", "s" }
Как видите, нет пробелов нигде.
Вы можете удалить большую часть пустых строк, изменив "[^a-z]"
на "[^a-z]+"
, поэтому несколько последовательных не букв будут одним разделителем, который даст вам:
{ "", "d", "s" }
Чтобы удалить начальную пустую строку, сначала удалите начальные не буквы из исходной строки:
String[] alpha = str.replaceFirst("[^a-z]+", "").split("[^a-z]+");
Это даст вам:
{ "d", "s" }
Что, конечно, удалит все пустые строки в вашем выводе:
d
s
И вы можете удалить этот replaceAll("\\s+", "")
вызов, поскольку он ничего не делает.