Как найти символы разделенные пробелом в строке в Java? - PullRequest
0 голосов
/ 21 сентября 2018

В приложении, которое я продолжаю разрабатывать, мне нужно найти все символы, разделенные пробелом, что является словом при нормальных обстоятельствах.Позвольте мне привести вам пример.

This is an e x a m p l e sentence.

В приведенном выше примере мне нужно найти пример .

Я провел поиск через SO,но не смог найти решение моей проблемы.Большинство подобных проблем - это попытка регулярного выражения строки и маска некоторых символов в ней.

Любая помощь будет принята с благодарностью.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018
List<String> letters = Arrays.stream(yourString.split(" ").filter(part->part.length()==1).collect(Collectors.toList());

Пошаговое объяснение:

Возьмите исходную строку, разбейте ее на каждый пустой символ и поместите все полученные строки в массив строк:

String[] parts = yourString.split(" ");

результирующий массив строк в настоящее время также содержит строки, имеющие более 1 символа.Таким образом, вы должны перебрать эти строки и удалить все те строки, которые имеют более 1 символа, так что в итоге останутся только строки с одним символом.Java8 Streams API позволяет вам делать это описательным способом (Stream<T> filter(Predicate<? super T> predicate) метод), поэтому давайте преобразуем массив строк в поток строк:

Stream<String> partsStream = Arrays.stream(parts);

Теперь вы можете фильтровать поток, вызывая Stream<T> filter(Predicate<? super T> predicate) метод в этом потоке - все соответствующие строки будут возвращены как новый поток.Краткое замечание о предикатах: Java-интерфейс java.util.function.Predicate является так называемым «функциональным интерфейсом», функциональные интерфейсы имеют только один логический метод - в случае Predicate этот единственный метод называется boolean test(T t).Таким образом, для каждого элемента в потоке этот метод test(...) будет вызываться для определения того, соответствует ли элемент определенному условию.Краткая и описательная реализация этого предиката может быть так называемым лямбда-выражением (Java8 +):

// for filtering in the next line, only keep strings with 1 character!
Predicate<String> filterCondition = item -> item.length() == 1;

Stream<String> filteredStream = partsStream.filter(filterCondition);

В конце вы «собираете» все строки внутри отфильтрованного потока в java.util.List типа java.lang.String:

List<String> letters = filteredStream.collect(Collectors.toList());
0 голосов
/ 21 сентября 2018

Вы можете использовать

\b(?:\w )+\w\b

То есть - граница слова, за которой следуют (повторяющиеся) одиночные символы и пробелы, за которыми следует еще один символ и граница слова.

https://regex101.com/r/gOXP2w/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...