如何在Java中的字符串中找到以空格分隔的字符?

时间:2018-09-21 11:01:00

标签: java regex string

在我继续开发的应用程序中,我需要找到所有用空格分隔的字符,这在通常情况下是一个词。 让我举一个例子。

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

在上面的示例中,我需要找到 e x a m p l e

我已经通过SO进行了搜索,但是找不到解决我问题的方法。大多数类似的问题都在尝试正则表达式字符串和 mask 其中的一些字符。

任何帮助将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用

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

即-一个单词边界,后跟(重复)单个字符和空格,然后是另一个字符和单词边界。

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

答案 1 :(得分:1)

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是所谓的“函数接口”,函数接口只有一个布尔值方法-在谓词的情况下,此单个方法称为boolean test(T t)。因此,对于流中的每个项目,此test(...)方法将被调用以确定项目是否符合特定条件。此谓词的简短描述性实现可以是所谓的 lambda表达式(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的{​​{1}}中:

java.lang.String