tl; dr
Пропустить регулярное выражение. Просто используйте строковые манипуляции в одном операторе.
Arrays
.stream( "aaa, bbb, ccc, ddd".split( ", " ) ) // Parse the text using COMMA with SPACE as the delimiter.
.map( ( String s ) -> s + " " + s + "_" ) // Change `aaa` to `aaa aaa_`.
.collect( Collectors.joining( ", " ) ); // Join the modified strings together as a single string.
aaa aaa_, bbb bbb_, ccc ccc_, ddd ddd_
String::split
Нет необходимости в регулярном выражении .
Вы можете достичь sh этой цели, разделив слова, разделенные запятыми, на массив строк, создайте поток из этого массива и присоедините их обратно снова вместе без лишнего терминатора. И вы можете сделать все, кроме однострочного.
Учитывая этот ввод:
String input = "aaa, bbb, ccc, ddd";
… разбить строку на части.
String[] pieces = input.split( ", " ) ;
Stream
Создайте поток из этих частей.
Stream < String > streamOfPieces = Arrays.stream( pieces ) ;
Возьмите каждый элемент из потока и преобразуйте каждый, добавляя ПРОБЕЛ, ту же строку снова и подчеркивание, которое вы хотите в конце.
Stream < String > streamOfModifiedPieces = streamOfPieces.map( ( String s ) -> s + " " + s + "_" );
Собрать результаты потока
Завершить поток, собирая все эти преобразованные элементы с помощью Collector
. Необходимая нам реализация Collector
предоставляется путем вызова Collectors.joining
. Мы передаем желаемый разделитель этому сборщику. В нашем случае желаемый разделитель - это ЗАПЯТАЯ и ПРОБЕЛ, ,
. Сборщик достаточно умен, чтобы включить разделитель между элементами, но опустить его до конца.
String output = streamOfModifiedPieces.collect( Collectors.joining( ", " ) );
output = aaa aaa_, bbb bbb_, ccc ccc_, ddd ddd_
Однострочный
Скомбинируйте все это в обещанный однострочник.
String output = Arrays.stream( "aaa, bbb, ccc, ddd".split( ", " ) ).map( ( String s ) -> s + " " + s + "_" ).collect( Collectors.joining(", ") );
… или…
String output =
Arrays
.stream( "aaa, bbb, ccc, ddd".split( ", " ) )
.map( ( String s ) -> s + " " + s + "_" )
.collect( Collectors.joining( ", " ) );
aaa aaa_, bbb bbb_, ccc ccc_, ddd ddd_