我试着用Java中的Streams来计算单词.这是我试过的:
public static int countWords(String s) {
return s.chars().reduce((x, y) -> {
if((char)y == ' ')
++x;
return x;
}).orElse(0);
}
Run Code Online (Sandbox Code Playgroud)
但是countWords("asd")回归97.为什么?我认为实际上由s 组成的chars回报.所以,我只是把它投到了.怎么了?IntStreamcharchar
虽然你的问题是指计算单词,但你的代码似乎是为了计算空格而设计的.如果这是你的意图那么我会建议:
input.chars().filter(Character::isSpaceChar).count();
Run Code Online (Sandbox Code Playgroud)
这样可以避免代码中出现的许多转换并发症,isWhitespace如果对您的域更有意义,可以将其更改为.
但是,如果你想计算单词,那么最简单的解决方案是split在空格上然后计算非空单词:
Pattern.compile("\\s+").splitAsStream(input).filter(word -> !word.isEmpty()).count();
Run Code Online (Sandbox Code Playgroud)
reduce运算符有不同的重载:
如果未指定"x"的标识值,则reduce运算符将从流中获取第一个值.因此'x'最后是字母'a',作为整数,即97.您可能想要将代码更改为:
public static int countWords(String s) {
return s.chars().reduce(0, (x, y) -> {
if((char)y == ' ')
return x + 1;
return x;
});
}
Run Code Online (Sandbox Code Playgroud)
我会建议更多的功能方法:
public static long countWords(String s) {
return Arrays
.stream(s.split(" "))
.filter(w -> !w.isEmpty())
.count();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
386 次 |
| 最近记录: |