在我继续开发的应用程序中,我需要找到所有用空格分隔的字符,这在通常情况下是一个词。 让我举一个例子。
This is an e x a m p l e sentence.
在上面的示例中,我需要找到 e x a m p l e 。
我已经通过SO进行了搜索,但是找不到解决我问题的方法。大多数类似的问题都在尝试正则表达式字符串和 mask 其中的一些字符。
任何帮助将不胜感激。
谢谢。
答案 0 :(得分:2)
答案 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