Книга: Программирование на языке Ruby
2.18. Удаление хвостовых символов новой строки и прочих
2.18. Удаление хвостовых символов новой строки и прочих
Часто бывает необходимо удалить лишние символы в конце строки. Типичный пример — удаление символа новой строки после чтения строки из внешнего источника.
Метод chop
удаляет последний символ строки (обычно это символ новой строки). Если перед символом новой строки находится символ перевода каретки (r
), он тоже удаляется. Причина такого поведения заключается в том, что разные операционные системы неодинаково трактуют понятие «новой строки». В UNIX-подобных системах новая строка представляется символом n. А в DOS и Windows для этой цели используется пара символов rn
.
str = gets.chop # Прочитать, удалить символ новой строки.
s2 = "Some stringn" # "Some string" (нет символа новой строки).
s3 = s2.chop! # s2 теперь тоже равно "Some string".
s4 = "Other stringrn"
s4.chop! # "Other string" (нет символа новой строки).
Обратите внимание, что при вызове варианта chop!
операнд-источник модифицируется.
Важно еще отметить, что последний символ удаляется, даже если это не символ новой строки:
str = "abcxyz"
s1 = str.chop # "abcxy"
Поскольку символ новой строки присутствует не всегда, иногда удобнее применять метод chomp
:
str = "abcxyz"
str2 = "123n"
str3 = "123r"
str4 = "123rn"
s1 = str.chomp # "abcxyz"
s2 = str2.chomp # "123"
# Если установлен стандартный разделитель записей, то удаляется не только
# n, но также r и rn.
s3 = str3.chomp # "123"
s4 = str4.chomp # "123"
Как и следовало ожидать, имеется также метод chomp!
для замены «на месте». Если методу chomp
передана строка-параметр, то удаляются перечисленные в ней символы, а не подразумеваемый по умолчанию разделитель записей. Кстати, если разделитель записей встречается в середине строки, то он не удаляется:
str1 = "abcxyz"
str2 = "abcxyz"
s1 = str1.chomp("yz") # "abcx"
s2 = str2.chomp("x") # "abcxyz"
- 2.1. Представление обычных строк
- 2.2. Альтернативная нотация для представления строк
- 2.3. Встроенные документы
- 2.4. Получение длины строки
- 2.5. Построчная обработка
- 2.6. Побайтовая обработка
- 2.7. Специализированное сравнение строк
- 2.8. Разбиение строки на лексемы
- 2.9. Форматирование строк
- 2.10. Строки в качестве объектов ввода/вывода
- 2.11. Управление регистром
- 2.12. Вычленение и замена подстрок
- 2.13. Подстановка в строках
- 2.14. Поиск в строке
- 2.15. Преобразование символов в коды ASCII и обратно
- 2.16. Явные и неявные преобразования
- 2.17. Дописывание в конец строки
- 2.18. Удаление хвостовых символов новой строки и прочих
- 2.19. Удаление лишних пропусков
- 2.20. Повтор строк
- 2.21. Включение выражений в строку
- 2.22. Отложенная интерполяция
- 2.23. Разбор данных, разделенных запятыми
- 2.24. Преобразование строки в число (десятичное или иное)
- 2.25. Кодирование и декодирование строк в кодировке rot13
- 2.26. Шифрование строк
- 2.27. Сжатие строк
- 2.28. Подсчет числа символов в строке
- 2.29. Обращение строки
- 2.30. Удаление дубликатов
- 2.31. Удаление заданных символов
- 2.32. Печать специальных символов
- 2.33. Генерирование последовательности строк
- 2.34. Вычисление 32-разрядного CRC
- 2.35. Вычисление МD5-свертки строки
- 2.36. Вычисление расстояния Левенштейна между двумя строками
- 2.37. base64-кодирование и декодирование
- 2.38. Кодирование и декодирование строк (uuencode/uudecode)
- 2.39. Замена символов табуляции пробелами и сворачивание пробелов в табуляторы
- 2.40. Цитирование текста
- 2.41. Заключение
- 2.4. Получение длины строки
- 2.19. Удаление лишних пропусков
- 2.28. Подсчет числа символов в строке
- 2.31. Удаление заданных символов
- Глава 2. Строки
- 2.10. Строки в качестве объектов ввода
- Инструмент командной строки gbak
- Инструмент командной строки gfix
- Имена объектов длиной 68 символов
- 6.3. Добавление фоновой музыки
- Отличительные особенности новой версии
- Преобразование строки в целое: stoi( )