Ruby:如何计算一个字符串在另一个字符串中出现的次数?

2023-12-27

我正在尝试计算一个字符串在另一个字符串中出现的次数。

我知道你可以计算一个字母在字符串中出现的次数:

string = "aabbccddbb"
string.count('a')
=> 2

但是,如果我搜索“aa”在此字符串中出现的次数,我也会得到两次。

string.count('aa')
=> 2

我不明白这一点。我将值放在引号中,因此我正在搜索确切字符串出现的次数,而不仅仅是字母。


这里有两种方法来计算给定子字符串在字符串中出现的次数(第一种是我的偏好)。注意(经OP确认)子字符串'aa'在字符串中出现两次'aaa',因此五次:

str = "aaabbccaaaaddbab"

1. Use 字符串#scan http://www.ruby-doc.org/core-2.1.0/String.html#method-i-scan使用包含查找给定子字符串的正向前瞻的正则表达式

def count_em(str, substr)
  str.scan(/(?=#{substr})/).count
end
count_em(str,"aa")
  #=> 5
count_em(str,"ab")
  #=> 2

Note:

"aaabbccaaaaddbab".scan(/(?=aa)/)
  #=> ["", "", "", "", ""]

正向回顾会产生相同的结果:

"aaabbccaaaaddbab".scan(/(?<=aa)/)
  #=> ["", "", "", "", ""]

还有,String#scan可以替换为以下形式字符串#gsub http://ruby-doc.org/core-2.5.1/String.html#method-i-gsub它接受一个参数(这里是相同的正则表达式)并且没有块,并返回一个枚举器。那种形式的gsub不寻常之处在于与角色替换无关;它只是生成正则表达式的匹配项。

2. 将给定字符串转换为字符数组,应用字符串#each_char https://ruby-doc.org/core-2.7.0/String.html#method-i-each_char then 可枚举#each_cons http://www.ruby-doc.org/core-2.1.1/Enumerable.html#method-i-each_cons, then 可枚举#count https://ruby-doc.org/core-2.7.0/Enumerable.html#method-i-count

def count_em(str, substr)
  subarr = substr.chars
  str.each_char
     .each_cons(substr.size)
     .count(subarr)
end
count_em(str,"aa")
  #=> 5
count_em(str,"ab")
  #=> 2

We have:

subarr = "aa".chars
  #=> ["a", "a"]
enum0 = "aaabbccaaaaddbab".each_char
  #=> #<Enumerator: "aaabbccaaaaddbab":each_char>

我们可以通过将其转换为数组来查看此枚举器将生成​​的元素:

enum0.to_a
  #=> ["a", "a", "a", "b", "b", "c", "c", "a", "a", "a",
  #    "a", "d", "d", "b", "a", "b"]

enum1 = enum0.each_cons("aa".size)
  #=> #<Enumerator: #<Enumerator:
  #      "aaabbccaaaaddbab":each_char>:each_cons(2)> 

Convert enum1到一个数组以查看枚举器将传递给哪些值map:

enum1.to_a
  #=> [["a", "a"], ["a", "a"], ["a", "b"], ["b", "b"], ["b", "c"],
  #    ["c", "c"], ["c", "a"], ["a", "a"], ["a", "a"], ["a", "a"], 
  #    ["a", "d"], ["d", "d"], ["d", "b"], ["b", "a"],
  #    ["a", "b"]]
 
enum1.count(subarr)
  #=> enum1.count(["a", "a"])
  #=> 5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby:如何计算一个字符串在另一个字符串中出现的次数? 的相关文章

  • 去除字符串的最佳方法是什么?

    我需要具有最佳性能的想法来删除 过滤字符串 I have string Input view 512 3 159 删除 view 和 的最佳性能方法是什么 和引号 我可以做这个 Input Input Replace view Replac
  • 如何在 JS Rails 响应中包含 HTML?

    我有一个响应 HTML 和 JS AJAX 查询的 FooController app controllers foo controller rb class FooController lt ApplicationController l
  • 从类内部调用属性访问器方法[重复]

    这个问题在这里已经有答案了 我正在尝试调用我的类属性编写器之一 但由于某种原因它永远不会被调用 下面是一些代码 可以使这一点更清楚 class Test attr reader test def test val puts Called t
  • 带有附加参数的redirect_to

    我是一个菜鸟 redirect to users url notice Succeed p p 然后我添加一个message它失败了 redirect to users url notice Succeed message test p p
  • 为什么不能用反斜杠结束原始字符串? [复制]

    这个问题在这里已经有答案了 我在这里很困惑 尽管原始字符串会转换每个 to 但是当这个 最后出现它会引发错误 gt gt gt r so m e te xt so m e te xt gt gt gt r so m e te xt Synt
  • 如何编写一个在安装 RubyGem 时调用的钩子?

    我想编写一个 Ruby 片段 当我的 Gem 首次安装时运行 sudo gem install mygem 能做到吗 看起来并没有真正支持 我发现了一个 post install message 属性 您应该能够在 gem 规范中设置该属性
  • 在 Objective-C 中比较 2 个字符串

    我写了以下代码 if depSelectedIndice gt 1 comSelectedIndice gt 1 NSLog depart elemet d depSelectedIndice NSLog depart elemet d c
  • 在 HTML5 Javascript 中将 BlobBuilder 转换为字符串

    function blobToString blob var reader new FileReader var d reader onloadend function d callback reader result console lo
  • 回滚后是否应该删除迁移

    我对 ruby 和 Rails 相当陌生 刚刚开始了解迁移 我的问题是回滚后删除迁移的最佳实践或正确时间是什么 到目前为止 我读到的内容是回滚后是否删除迁移的观点问题 但是在团队中工作时删除迁移是否有任何重大影响 以及保留迁移文件相对于删除
  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的
  • 如何消除字符串中的所有换行符?

    我需要删除字符串中出现的所有换行符 来自数据库 我使用下面的代码来做到这一点 value Replace r n Replace n Replace r 我可以看到至少有一个角色的行为就像行尾一样幸存了下来 字符代码是8232 http w
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • 计数物体和更好的填充孔的方法

    我是 OpenCV 新手 正在尝试计算物体的数量在图像中 我在使用 MATLAB 图像处理工具箱之前已经完成了此操作 并在 OpenCV Android 中也采用了相同的方法 第一步是将图像转换为灰度 然后对其进行阈值计算 然后计算斑点的数
  • Emacs、ruby:将 do 结束块转换为大括号,反之亦然

    我经常发现自己转换这样的代码 before do something end to before something 有没有办法在 emacs 中自动执行此任务 我使用 ruby mode 和 rinary 但它们在这里没有太大帮助 rub
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 从字符串末尾删除多个字符类型

    我有一个构建地址字段的循环 其中一些字段在字符串末尾可能为空 List
  • 确定 C 字符串是否是 C 中的有效 int

    我需要检查 C 字符串是否是有效整数 我都尝试过 int num atoi str and int res sscanf str d num 但发送字符串 8 9 10 这两行都仅返回 8 而没有指示该字符串的无效性 谁能提出替代方案 看看
  • 在 String.Format 中插入格式化字符?

    我用谷歌搜索了这个 但 VB Net 2008 似乎不允许在 String Format 中插入格式化字符 例如 t r n BAD MessageBox Show String Format 0 tab 1 Foo Bar BAD Mes
  • rspec 中的模拟方法链

    有一系列方法可以获得user目的 我试图模拟以下内容以返回user in my Factory Girl current user AuthorizeApiRequest call request headers result 我可以模拟该

随机推荐

  • 如何在 MVC 模型中表示一个月的复选框

    我无法理解如何使用 MVC 创建下表 并将其成功绑定到模型 我基本上需要跟踪该月的哪几天需要发生事件 这是我对模型的尝试 EDIT 这不是一个月 而是任意 4 周的周期 public class ScheduleViewModel publ
  • 对术语...进行抽象会导致术语...类型错误

    这是我想证明的 A Type i nat index f nat nat n nat ip n lt i partial index f nat option nat L partial index f index f n Some n V
  • 在 PostgreSQL 中声明“not-null-string”数组类型的列

    使用 PostgreSQL 9 6 我可以创建一个类型为 not null array of string 的列 CREATE TABLE example foo TEXT NOT NULL 但这允许元素为空 即我可以这样做 INSERT
  • 在哪里可以找到有关如何开发(rails 3)助手的文档[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我可能是瞎子 但我真的找不到任何关于如何在 Rails 3 中为您自己的视图编写帮助程序的好文档 我正
  • 像 Android 电视 Leanback 中的 Android 手机一样的垂直列表

    我想创建一个简单的垂直列表 一行中的单列 它只能垂直滚动 不能水平滚动 我如何使用 Leanback 在 Android 电视上实现此目的 有关 ui 要求的更多说明 请参阅下图 我尝试使用 VerticalSupportFragment
  • 搜索未排序的数组

    也可能具有重复元素的未排序数组中的最小和最大比较次数是多少 我知道在未排序的数组中查找任何内容都是 O n 问题 但是 如果数组也包含重复元素 这是真的吗 我所说的重复元素是指在给定数组中多次出现的元素 所以这里的想法是你必须从头到尾遍历数
  • 互斥体是如何实现的?

    对于特定应用程序 某些实现是否比其他实现更好 通过推出自己的产品有什么收入吗 查看描述测试和设置 http en wikipedia org wiki Test and set维基百科上的机器指令 它暗示了如何在机器级别实现原子操作 我可以
  • 使用 PHP 发送文件时在 Internet Explorer 中维护自定义文件扩展名?

    我有一个服务器端 zip 存档 我想将其作为下载传递 我正在使用自定义扩展将这些特定档案与某些客户端软件相关联 例如 CustomArchive bwz Chrome 和 FireFox 可以完美处理此自定义扩展 但 Internet Ex
  • 带Executor和不带Executor的多线程区别

    我试图找出普通多线程和使用执行器的多线程 维护线程池 之间的性能差异 以下是两者的代码示例 没有执行器代码 使用多线程 import java lang management ManagementFactory import java la
  • 使用 iText 生成波斯语 PDF

    Hi 我知道很多人之前可能都问过这个问题 我几乎读过所有这些 但它无法帮助我解决我的问题 我正在使用 iText java 库生成波斯语 PDF 我正在使用以下代码 Document document new Document PageSi
  • 如何防止浏览器预加载

    我用 JavaScript 为 Chrome 编写了一个用户脚本扩展 以防止视频和音频标签在页面加载时自动下载 这是代码 var videoTags document getElementsByTagName Video var i for
  • 如何在保存到 Parse.Cloud.beforeSave 之前将照片调整为多种照片尺寸

    首先让我先说我让这段代码完美地工作以获得缩略图 https parse com docs cloud modules guide images https parse com docs cloud modules guide images
  • Google 计算器千位分隔符特殊字符

    注意 有关此问题的更多答案 请参阅Google 计算器中的特殊字符 https stackoverflow com questions 12867450 special characters in google calculator 我注意
  • 构建与系统具有相同证书的Android APK

    我正在尝试让系统应用程序正常工作 这是我所拥有的 具有完整 4 4 2 源代码的 OEM OMAP 平台 我已经使用 Ubuntu 14 04 构建了系统并加载到我的平台上 这一切都有效 现在 有一个来自 OEM 的应用程序可以直接访问硬件
  • Chartjs-plugin-annotation 与 ng2-charts 的正确配置位置?

    我在用着ng2 charts在我的 Angular 应用程序中绘制条形图 在某些时候 我不得不向我的图表添加静态线 我决定使用chartjs plugin annotation 将这两个库连接在一起没有很好的记录 但经过一些谷歌搜索后 我最
  • cmake 中何时应使用 PUBLIC/PRIVATE/INTERFACE 的示例

    我正在阅读有关 cmake 关键字的内容PUBLIC PRIVATE INTERFACE并发现了这一段here https cmake org cmake help latest manual cmake buildsystem 7 htm
  • Jquery textarea val() 不换行

    我得到一个带有 keyup 函数的文本区域 当用户输入内容时 我希望该文本呈现在 blockquote 标记内 它可以工作 但 id 不接受换行符和空格 你能帮我吗 post body keyup function blockquote f
  • ViewHolder中View类型的字段itemView引用了什么?

    我想弄清楚这个领域是什么itemView实际上是 这是我从文档中获取的代码片段 public abstract static class ViewHolder NonNull public final View itemView other
  • iOS9 中的 UIDatePicker 问题

    日期隐藏在UIDatePicker在iOS9中 我正在使用xib 此问题仅在xoode7 iOS9 中出现 Can any one help me to solve my issue 我认为这是新字体 San Francisco 字体比 H
  • Ruby:如何计算一个字符串在另一个字符串中出现的次数?

    我正在尝试计算一个字符串在另一个字符串中出现的次数 我知道你可以计算一个字母在字符串中出现的次数 string aabbccddbb string count a gt 2 但是 如果我搜索 aa 在此字符串中出现的次数 我也会得到两次 s