2014-02-02 2 views
0

Я пытаюсь считать символы в текстовом файле, исключая пробелы. Я думал использовать scan; однако в учебнике, который я читаю, используется gsub. Есть разница в выходе между ними, и мне было интересно, почему. Вот два блока кода; версия gsub является тот, который дает мне правильный вывод:Почему сканирование (/ w /) не совпадает с gsub (/ s + /, '') .length?

total_characters_nospaces = text.gsub(/\s+/, '').length 
puts "#{total_characters_nospaces} characters excluding spaces." 

А другой:

chars = 0 
totes_chars_no = text.scan(/\w/){|everything| chars += 1 } 
puts chars 
+2

показать нам фактический входной строки !! –

ответ

5

Противоположностью \s не \w - это \S.

\w эквивалентен [a-zA-Z0-9_]. Он не включает много других символов, таких как пунктуация.

\S - полная противоположность \s - он содержит любой символ, который не является пробелом.

+0

Спасибо Amber. Это было прекрасное объяснение. Спасибо. –

0

Теперь, когда ваш вопрос был дан ответ, вот несколько других способов, вы можете сделать это:

s = "now is the time for all good" 

s.count "^\s" # => 22 

s.each_char.reduce(0) { |count, c| count + (c =~ /\S/ ? 1 : 0) } # => 22 
Смежные вопросы