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

Clojure实现char-count函数:统计模式字符在字符串中的出现次数

解决Clojure的char-count函数需求

你的问题出在对re-seq的用法理解上:直接把pattern作为正则表达式传入的话,re-seq会匹配整个pattern字符串(比如"Bb"会找连续的"Bb"子串),而不是单独匹配pattern里的每个字符。下面给你两种简单的实现方式:

方法一:用集合快速判断(推荐新手)

把pattern转成字符集合,遍历目标字符串的每个字符,筛选出属于集合的字符后统计数量:

(defn char-count [pattern text]
  (let [target-chars (set pattern)]
    (count (filter #(target-chars %) text))))
  • 测试示例:
    (char-count "Bb" "Best buy") ; 返回2
    (char-count "AaR" "A Tale of Recursion") ; 返回3
    
  • 逻辑说明:
    1. (set pattern)将pattern字符串转换为字符集合,集合的成员查找效率很高
    2. filter遍历text的每个字符,只保留存在于集合中的字符
    3. 最后用count统计筛选后的字符总数

方法二:用正则表达式字符类

如果想用正则实现,需要把pattern包装成正则的字符类(用[]包裹),这样就能匹配pattern里的任意单个字符:

(defn char-count [pattern text]
  (count (re-seq (re-pattern (str "[" pattern "]")) text)))
  • 测试示例和上面一致,结果正确
  • 注意:如果pattern里包含正则特殊字符(比如[、]、^等),需要额外转义,所以这种方法更适合pattern是普通字符的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:50:39