You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala:以纯函数式风格统计字符串中特定字符出现次数

纯函数式实现特定字符统计的修正方案

嗨,我来帮你搞定这个纯函数式统计字符的问题~ 先看看你写的代码哪里出问题了:

你的foldLeft写法有两个关键错误:

  • 你把(x,_)作为匹配对象,然后用case k if(k == 'h')来判断,但这里的k其实是元组(x,_),元组和字符'h'根本没法比较,所以这个条件永远不成立;
  • 你只处理了匹配的情况,没有处理不匹配的分支,运行时会抛出MatchError。

下面给你两种正确的纯函数式实现方式:

方式一:用if-else简化实现

这是最直观的纯函数式写法,直接在foldLeft的函数参数里判断字符:

// 统计字符串中'H'的数量
val count1 = "HelloWorldHHHH".foldLeft(0) { (acc, char) =>
  if (char == 'H') acc + 1 else acc
}
println(count1) // 输出:5

方式二:用模式匹配实现

如果你想用模式匹配来写,应该针对当前字符做匹配,同时要覆盖所有情况:

val count1 = "HelloWorldHHHH".foldLeft(0) { (acc, char) =>
  char match {
    case 'H' => acc + 1
    case _ => acc // 处理所有非'H'的情况
  }
}
println(count1) // 输出:5

另外补充一句:你之前提到的"HelloWorldHHHH".count(_ == 'H')其实已经是纯函数式实现啦!count方法是纯函数(相同输入一定会得到相同输出,没有任何副作用),完全符合纯函数式的要求。

最后提醒下:注意字符的大小写哦,比如你例子里的"Hello"里的是小写'h',如果要统计它的话,记得把判断条件改成char == 'h'~

内容的提问来源于stack exchange,提问作者F0cus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:32:43