如何用Ruby检测文件中指定单词是否重复出现两次
检测大文件中单词是否出现两次的Ruby实现
针对你的需求,下面提供两种完善后的代码方案,分别对应完整单词匹配和子字符串匹配场景,同时兼顾大文件的内存效率:
方案1:完整单词匹配(推荐,避免子串误匹配)
该方案严格匹配独立单词,比如不会把"apples"中的"apple"算作一次匹配:
puts "Enter a word: " target_word = gets.chomp.downcase # 若需区分大小写,移除.downcase count = 0 File.foreach('worldcountry.txt') do |line| line_words = line.downcase.split # 区分大小写则移除.downcase line_words.each do |word| count += 1 if word == target_word # 计数达标后立即终止程序,无需读取剩余内容 if count >= 2 puts "单词 '#{target_word}' 出现了至少两次" exit end end end # 遍历完文件后判断结果 puts "单词 '#{target_word}' 出现不足两次" if count < 2
方案2:子字符串匹配
如果需要统计目标单词作为子字符串的出现次数(比如"cat"在"category"中也算一次),可以用这个方案:
puts "Enter a word: " target_word = gets.chomp.downcase # 区分大小写则移除.downcase count = 0 File.foreach('worldcountry.txt') do |line| # 统计当前行中目标单词的出现次数 count += line.downcase.scan(target_word).size if count >= 2 puts "单词 '#{target_word}' 出现了至少两次" exit end end puts "单词 '#{target_word}' 出现不足两次" if count < 2
关键优化点
- 使用
File.foreach逐行读取文件,不会一次性加载整个大文件到内存,避免内存溢出 - 计数达到2时立即退出程序,减少不必要的IO操作,提升效率
- 替换全局变量
$word为局部变量target_word,符合Ruby编码规范 - 可选的大小写忽略处理,可根据实际需求调整
内容的提问来源于stack exchange,提问作者carl Bloid
相关产品推荐
相关产品推荐

