[英]how to count the words of a string in ruby
我想做這樣的事情
def get_count(string)
sentence.split(' ').count
end
我認為可能有更好的方法,字符串可能有內置的方法來做到這一點。
我相信count是一個函數所以你可能想要使用length。
def get_count(string)
sentence.split(' ').length
end
編輯:如果你的字符串真的很長,從它創建一個數組,任何拆分將需要更多的內存所以這是一個更快的方法:
def get_count(string)
(0..(string.length-1)).inject(1){|m,e| m += string[e].chr == ' ' ? 1 : 0 }
end
如果唯一的單詞邊界是單個空格,那么只計算它們。
puts "this sentence has five words".count(' ')+1 # => 5
如果單詞之間有空格,行尾,制表符,逗號后跟空格等,則可能會掃描單詞邊界:
puts "this, is./tfour words".scan(/\b/).size/2
我知道這是一個老問題,但這可能有助於有人在這里磕磕絆絆。 反對詞是一個復雜的問題。 什么是“字”? 數字和特殊字符算作單詞嗎? 等等...
我為此目的寫了words_counted gem。 它是一個高度靈活,可定制的字符串分析器。 您可以要求它使用正則表達式,字符串和數組來分析字數統計,單詞出現以及排除單詞/字符的任何字符串。
counter = WordsCounted::Counter.new("Hello World!", exclude: "World")
counter.word_count #=> 1
counted.words #=> ["Hello"]
等等...
我寧願直接檢查單詞邊界:
"Lorem Lorem Lorem".scan(/\w+/).size
=> 3
如果你需要將搖滾樂作為一個單詞匹配,你可以這樣做:
"Lorem Lorem Lorem rock-and-roll".scan(/[\w-]+/).size
=> 4
使用正則表達式還將涵蓋多個空格:
sentence.split(/\S+/).size
字符串沒有任何預先構建的內容可以執行您想要的操作。 您可以在類中定義方法,或者為您要執行的操作擴展String類本身:
def word_count( string )
return 0 if string.empty?
string.split.size
end
正則表達式拆分任何非單詞字符:
string.split(/\W+/).size
...雖然它使撇號使用計為兩個單詞,因此根據誤差范圍需要多小,您可能需要構建自己的正則表達式。
我最近發現String#count比將字符串分割超過一個數量級更快。
不幸的是,String#count只接受一個字符串,而不是正則表達式。 此外,它將兩個相鄰的空間視為兩件事,而不是一件事,你必須單獨處理其他空白字符。
p " some word\nother\tword.word|word".strip.split(/\s+/).size #=> 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.