2015-03-24 63 views
0

我正在做一個紅寶石審計,今天早上開始罰款(使用單個字,用戶輸入的內容省略),但現在我試圖實現一個單詞表,它puts要搜索的字符串的次數與單詞表中的單詞相同,只能審查一次或兩次。我的代碼如下。每個執行錯誤(紅寶石)

#by Nightc||ed, ©2015 
puts "Enter string: " 
text = gets.chomp 
redact = File.read("wordlist.txt").split(" ") 
words = text.split(" ") 
redact.each do |beep| 
    words.each do |word| 
     if word != beep 
      print word + " " 
     else 
      print "[snip] " 
     end 
    end 
end 
sleep 

我有點理解它爲什麼不起作用,但我不知道如何解決它。

任何幫助,將不勝感激。

回答

0

有一個比遍歷每個數組更簡單的方法。可以很容易地使用Array#include方法來查看單詞是否包含在您的編輯列表中。

下面是一些代碼,應該表現你是如何想的原代碼的行爲:

puts "Enter string: " 
text = gets.chomp 
redact = File.read("wordlist.txt").split(" ") 
words = text.split(" ") 

words.each do |word| 
    if redact.include? word 
    print "[snip] " 
    else 
    print word + " " 
    end 
end 
0

擦洗文本變得非常棘手。你要注意的一件事是字界。因空間分割會讓許多嘟嘟的單詞由於念頭而得以通過。比較下面示例代碼的前兩個結果。

接下來,將分割文本重新組裝到預期形式中,使用punction,spacing等等,將變得非常具有挑戰性。您可能要考慮使用正則表達式來預先設定與用戶註釋一樣小的內容。看到第三個結果。

如果你將此作爲一種學習練習,那很好,但如果應用程序對敏感的地方很容易受到失敗煽風點火的困擾,那麼你可能需要尋找一個經過良好測試的庫。

#!/usr/bin/env ruby 
# Bleeper 

scifi_curses = ['friggin', 'gorram', 'fracking', 'dork'] 
text = "Why splitting spaces won't catch all the friggin bleeps ya gorram, fracking dork." 

words = text.split(" ") 
words.each do |this_word| 
    puts "bleep #{this_word}" if scifi_curses.include?(this_word) 
end 

puts 

better_words = text.split(/\b/) 
better_words.each do |this_word| 
    puts "bleep #{this_word}" if scifi_curses.include?(this_word) 
end 

puts 

bleeped_text = text # keep copy of original if needed 
scifi_curses.each do |this_curse| 
    bleeped_text.gsub!(this_curse, '[bleep]') 
end 

puts bleeped_text 

你應該得到這些結果:

bleep friggin 
bleep fracking 

bleep friggin 
bleep gorram 
bleep fracking 
bleep dork 

Why splitting spaces won't catch all the [bleep] bleeps ya [bleep], [bleep] [bleep].