需要找到词组中每个句子的最大词数。句子用?.!
符号分隔。
我几乎已经完成了这项任务,但是我坚持以纯Java 8的方式来完成它,您能帮我吗?
public static void main(String[] args) {
assert solution("We test coders. Give us a try?") == 4;
assert solution("Forget CVs..Save time . x x") == 2;
assert solution("Some some! time . x x") == 2;
}
public static int solution(String S) {
return Arrays.stream(S.split("[.!?]"))
.map(String::trim)
.filter(s -> !s.isEmpty())
.max(Comparator.comparingInt(o -> o.split(" ").length))
.map(s -> s.split(" "))
.flatMap(...); // <-- what to do here?
}
最佳答案
只需按"\\s+"
分割单词即可(因此您将忽略多个空格字符)。然后从max()
获取IntStream
值。
Arrays.stream(str.split("[.!?]"))
.map(String::trim)
.filter(s -> !s.isEmpty())
.mapToInt(s -> s.split("\\s+").length)
.max()
.orElse(0);
@Holger提出的更新答案:
Arrays.stream(str.split("\\s*+(?:[.!?]\\s*+)+"))
.mapToInt(s -> s.split("\\s+").length)
.max()
.orElse(0);
还有另一种实用的样式方法(只是为了好玩)。我怀疑您是否需要它:)
Stream.of(str)
.map(splittingBy("\\s*+(?:[.!?]\\s*+)+"))
.flatMap(Arrays::stream)
.map(splittingBy("\\s+"))
.mapToInt(arr -> arr.length)
.max()
.orElse(0);
...
static Function<String, String[]> splittingBy(String regex) {
return str -> str.split(regex);
}
关于java - 查找Java 8时尚中的最大单词数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55159951/