Відповіді:
Використовувати потрібно "\n"
не '\n'
у своєму gsub. Різні лапки ведуть себе по-різному.
Подвійні лапки "
дозволяють розширити символи та інтерполяцію виразів, тобто. вони дозволяють вам використовувати знаки управління, що уникнули, як \n
би представляти їх справжнє значення, в цьому випадку - новий рядок , і дозволяють використовувати #{expression}
так, щоб ви могли вплітати в текст змінні і, ну, майже будь-який вигляд рубіну.
З іншого боку, одинарні цитати '
трактують рядок буквально, тому немає розширення, заміни, інтерполяції чи того, що у вас є.
В даному конкретному випадку, це краще використовувати або .delete
чи .tr
метод String , щоб видалити символ нового рядка .
tr
кращим вибором для цього завдання, але, як я кажу, я вважав, що краще вказати на різницю в одинарних, подвійних лапках, коли я відповідав.
Коли ви хочете видалити рядок, а не замінити її, ви можете використовувати String#delete
(або її мутаторний еквівалент String#delete!
), наприклад:
x = "foo\nfoo"
x.delete!("\n")
x
тепер дорівнює "foofoo"
У цьому конкретному випадку String#delete
читабельніше, ніж gsub
оскільки ви фактично не замінюєте рядок нічим.
delete
є руйнівним, як зазначено тут. Він повертає новий рядок.
Якщо ви хочете чи не заперечуєте, щоб видалити всі провідні та кінцеві пробіли з рядка, ви можете скористатися strip
методом.
" hello ".strip #=> "hello"
"\tgoodbye\r\n".strip #=> "goodbye"
як згадується тут .
редагувати Оригінальна назва цього питання була іншою. Моя відповідь - за оригінальне запитання.
strip
видаляє лише пробіли та пробіли: ruby-doc.org/core-1.9.3/String.html#method-i-strip-21
Для цього вам не потрібен регулярний вираз. Використовуйте tr:
"some text\nandsomemore".tr("\n","")
replace
просто змінює рядок на новий, як присвоєння змінної; тоді як tr
глобальна знахідка та заміна для персонажа.
використання chomp
або strip
функції від Ruby:
"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
strip
видаляє лише пробіли та пробіли - ruby-doc.org/core-1.9.3/String.html#method-i-strip-21