Я хочу подсчитать количество заглавных букв, чтобы определить процент прописных букв в строке. Я попытался сделать это с регулярным выражением string.match(/[A-Z]*/)
, но это будет соответствовать только первой комбинации заглавных букв.Подсчет заглавных букв в Ruby
ответ
string.scan()
относится ко всей цепочке и должно работать для вашего прецедента. Должно работать следующее:
your_string = "Hello World"
capital_count = your_string.scan(/[A-Z]/).length
Я думаю, что вы хотите 'yourString.scan (/ [A-Z] /). Length' – styvane
Вот несколько способов, которые не включают преобразование строки в массив символов.
CAPS = ('A'..'Z')
ALL_CAPS = CAPS.to_a.join
#=> "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
CHAR_TO_BIN = 128.times.with_object({}) do |i,h|
c = i.chr
h[c] = (CAPS.cover?(c) ? 1 : 0)
end
#=> {"\x00"=>0, "\x01"=>0, "\x02"=>0,...," "=>0, "!"=>0,...,
"0"=>0, "1"=>0,..."9"=>0, ":"=>0, ";"=>0, "<"=>0, "="=>0,
">"=>0, "?"=>0, "@"=>0, "A"=>1, "B"=>1,..."Z"=>1, "["=>0,...,
"a"=>0, "b"=>0,...,"z"=>0, "{"=>0,...,"\x7F"=>0}
str = "The quick brown dog, 'Lightning', jumped over 'Bubba', the lazy fox"
1: не очень эффективно, но Быстрейший на сегодняшний день и читает хорошо
str.count(ALL_CAPS)
#=> 3
2: Эффективное
str.each_char.reduce(0) { |t,c| t + (CAPS.cover?(c) ? 1 : 0) }
#=> 3
3: Если вам нужно делайте это много раз (может быть быстрее, чем # 2)
str.each_char.reduce(0) { |t,c| t + CHAR_TO_BIN[c] }
#=> 3
4: Удаление всех не колпачков и сосчитать
str.gsub(/[^A-Z]/,'').size
#=> 3
или удалить все крышки и посчитайте:
str.size - str.gsub(/[A-Z]/,'').size
#=> 3
A downvote? Ну что ж. Может быть, это Бубба, потому что это неправильно? –
Я думал, что это было бы интересно сравнить эффективность из предложенных методов.
require 'fruity'
CAPS = ('A'..'Z')
ALL_CAPS = CAPS.to_a.join
#=> "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
CHAR_TO_BIN = 128.times.with_object({}) do |i,h|
c = i.chr
h[c] = (CAPS.cover?(c) ? 1 : 0)
end
lower = ('a'..'z').to_a
upper = ('A'..'Z').to_a
L = 50_000
U = 10_000
Тест строка содержит L
случайно нарисованные строчные буквы и U
случайно нарисованные букв верхнего регистра, перемешиваются.
str = L.times.map {lower.sample}.concat(U.times.map {upper.sample}).shuffle.join
compare do
scan { str.scan(/[A-Z]/).length }
count { str.count(ALL_CAPS) }
reduce { str.each_char.reduce(0) { |t,c| t + (CAPS.cover?(c) ? 1 : 0) } }
hsh { str.each_char.reduce(0) { |t,c| t + CHAR_TO_BIN[c] } }
gsubA { str.gsub(/[^A-Z]/,'').size }
gsubB { str.size - str.gsub(/[A-Z]/,'').size }
end
Running each test 32 times. Test will take about 33 seconds.
count is faster than gsubB by 39x ± 10.0
gsubB is similar to scan
scan is faster than gsubA by 3x ± 1.0
gsubA is similar to hsh
hsh is similar to reduce
Я был поражен тем, насколько быстро String#count есть. Я предположил, что Ruby сделает include?
для каждого символа в строке. Я был неправ. Глядя на исходный код, есть функция C
tr_setup_table
, предполагая, что Ruby создает хэш или что-то подобное перед выполнением подсчета.
@theTinMan, я знаю, что вы заинтересованы в тестах; это довольно удивительно. –
- 1. Поиск и подсчет заглавных букв
- 2. Java подсчет заглавных букв в текстовом файле
- 3. сборка заглавных букв
- 4. Подсчет количества заглавных букв в каждой строке в [R]
- 5. Сенсорные идентификаторы заглавных букв
- 6. Определите триплеты заглавных букв
- 7. Изменение размера заглавных букв
- 8. Программа программирования заглавных букв
- 9. Найти пробежки заглавных букв
- 10. Метод для заглавных букв
- 11. Проверка только заглавных букв
- 12. Получение заглавных букв MASM x86
- 13. Оформить() сдачу заглавных букв сначала
- 14. WatiN и ввод заглавных букв
- 15. Как разрешить ввод заглавных букв в переменную
- 16. Сохранение существующих заглавных букв в строке
- 17. Разбиение на группу заглавных букв в python
- 18. Regexp для проверки заглавных букв в Unicode
- 19. Неправильное использование заглавных букв в UILabel
- 20. подсчет букв в текстовом файле в питоне
- 21. Преобразование всех заглавных букв Инициализировать колпачков
- 22. Как остановить @ font-face от заглавных букв
- 23. Поиск всех комбинаций заглавных букв случайного текста
- 24. Различный размер письма при использовании заглавных букв
- 25. Метод сортировки заглавных букв JavaScript сортировать по:
- 26. подсчет букв и пробелов
- 27. Подсчет чисел и букв
- 28. Подсчет букв в текстовом узле
- 29. Подсчет количества букв в SKLabelNode
- 30. подсчет букв в текстовом файле
'string.scan (/ [A-Z] /)' –