Индексы
Строка в ruby является объектом класса String. По индексу строки, по аналогии с индексом массива, можно извлекать, изменять и удалять данные из строки. Причем обращения по индексу идет через те же квадратные скобки, что и для массива.
Обращаясь к строке можно извлечь например первые 6 элементов или последний символ на основе индекса строки, по типу того, как мы извлекаем элементы array:
str[start, lenght] str[0,6] - извлекаем первые 6 элементов, где 0 - первый символ, 6 - сколько символов от первого str[7..10] - извлекаем с 7го по 10ый символы используя range str[-1] - извлекаем последний символ из строки str[-6,6] - извлекаем с конца строки шесть последний символов str[-6..-1] - извлекаем с конца строки шесть последний символов используя range
Кроме получения данных по индексу можно эти данные и менять/удалять/добавлять:
str[0,6] = "new_first_6_char" - заменяем первые 6 элементов на новые str[0,6] = "" - удаляем str[16,0] = "the end" - добавляем в конец строки данные (16 символ последний) str[-1,0] = "the end" - добавляем в конец строки данные (более корректный способ)
Методы
Почти все в ruby является объектом. Каждая строка является объектом класса string и к ней могут быть применены методы этого класса.
ПРОСМОТР
.dump – показываем все символы, включая специальные
.count(“e”) – считаем сколько раз встречается буква “e” в строке
.length – количество символов. Может быть использовано для базовых проверок полученных переменных (MAC, кредитка)
irb(main):017:0* "My name is Petr".length => 15
Выводим элементы массива, длина которых меньше определенного количества символов.
puts res.select {|x, l| x.length < 10 }
Поиск
.index – поиск начала позиции (индекса первой буквы) по строке в строке.
irb(main):001:0> str = "Fdffdfd lolkf fdsfdsf" => "Fdffdfd lolkf fdsfdsf" irb(main):002:0> str.index("lol") => 8 irb(main):003:0> puts str[8,3] lol => nil
.include? (str) – ищет подпадания указанной строки в указанной переменной строки. В результате выдает true/false.
We can do that using Ruby's .include? method, which evaluates to true if it finds what it's looking for and false otherwise. (As a general rule, Ruby methods that end with ? evaluate to the boolean values true or false.)
irb(main):027:0* puts str.include?("test") false => nil irb(main):028:0> puts str.include?("lol") true => nil
Замещение
.sub(“from”, “to”) – для замен первого подпадения (substitution) на заданное (аналог sed без g). Для замены в той же переменной нужно использовать sub!
.sub(/!|'/,"") # подменяет первый ! на ничего, остальные остаются @fw = snmp_get(@OID_FW).sub(/Build /, "")
.gsub(“from”, “to”) – для замен всех подпадений (global substitution) на заданное (аналог sed с g). Для замены в той же переменной нужно использовать gsub!
.gsub(/!|'/,"") # подменяет все ! на ничего feed = args.join(" ").sub(/f |F /,"").gsub(/!|'|"/,"")
Модификация
.capitalize – делает первый символ слова upcase, остальные downcase
.upcase/.downcase – понятно. Может быть использовано для приведения переменных к единому формату для облегчения проверок/стандартизации вывода.
We want to make sure we capture both "S" and "s" in the user's input. We could write separate if / else statements to handle this, but we can also use .downcase! to convert the user's input to all lower case. That way, we only have to search for "s".
.reverse – экранирование текста задом-наперед. Можно использовать в том числе и для экранирования массива.
irb(main):018:0> "My name is Petr".reverse => "rteP si eman yM" colors = {"blue" => 3, "green" => 1, "red" => 2} colors = colors.sort_by do |color, count| count end colors.reverse! > blue 3 red 2 green 1
Удаление
.chomp – удаление спец. символов с конца строки (напр. \n, \r, \r\n)
\r\n \r - carriage return, курсор должен быть перемещен в начало строки \n - newline separator, курсор должен быть перемещен на новую строку
.chomp(“end.”) – удаляем символы “end.” с конца строки
.chop – удаляем последний символ в строке, который не относится к служебному
.strip – офигенный метод класса String. Удаляет whitespace characters с начала и конца строки в ruby. Может например помочь любимый для Windows .txt символ ^M с конца строки (обнаружить просто через cat -v <file>).
.strip will remove all extra whitespace from the front and back, leaving innards alone.
Разное
Если выдает UTF-8 regexp with ASCII-8BIT string, то или строку нужно привести в UTF-8 (правильно) или regexp в ASCII.
str.force_encoding("utf-8")