Pattern(regex).splitAsStream(data)
имеет функциональность, аналогичную data.split(regex)
, поэтому также удаляет завершающие пустые строки, созданные в результате разделения .
Например, "a,b,".split(",")
НЕ приведет к ["a","b",""]
, но ["a","b"]
потому что пустые строки в конце массива будут удалены.
Наиболее существенное различие между Pattern#splitAsStream
и String#split
заключается в том, что метод String#split(regex)
имеет перегружен версия String#split(regex, limit)
, где limit
в зависимости от значения влияет на его результат.
Если предел равен
positive
, он устанавливает максимальное количество элементов в результирующем массиве, например, "a,b,c,d".split(",", 3)
приведет к ["a", "b", "c,d"]
. 0
вызывает удаление завершающих пустых строк (split(regex,0)
аналогично split(regex)
negative
- предотвращает удаление split
завершающего пустого строки - это то, что вам нужно.
Так что не используйте Pattern#splitAsStream
, а вместо этого String#split
метод, как вы пытались в своем предыдущем вопросе :
цитата на случай, если предыдущий вопрос будет удален
String fileContent = "Abc.134dsq";
String delimiter = ".";
fileContent = fileContent.replace(delimiter, "-");
String[] splitWords = fileContent.split("-");
StringBuilder stringBuilder = new StringBuilder();
for (String word : splitWords) {
StringBuilder output = new StringBuilder(word).reverse();
stringBuilder.append(output);
}
System.out.println(stringBuilder.toString());
Вещи, которые вам нужно исправить:
НЕ ЗАМЕНЯЙТЕ delimiter
в вашей строке на -
, чтобы разделить на -
, потому что ваша строка может содержать свои -
. Например, "A.B-C"
после замены .
на -
будет станьте A-B-C
, что приведет к нежелательному разделению B-C
.
Вместо разделения используйте Pattern.quote(delimiter)
- как вы сделали в примере, приведенном в текущем вопросе.
Использование split
с параметром отрицательного предела для предотвращения удаления висячих пустых строк (что-то вроде fileContent.split(Pattern(delimiter), -1)
)
Вы не являетесь добавление разделителей обратно к результирующей строке. Простое решение - использовать StringJoiner joiner = new StringJoiner(delimiter);
joiner.add(reversedElement)
вместо StringBuilder
, поскольку joiner.add
также будет обрабатывать добавление разделителя между элементами, к которым мы хотим присоединиться.