В Ruby, что является самым простым способом «разбить» в начале строки вместо конца? - PullRequest
18 голосов
/ 11 февраля 2012

В Ruby иногда мне нужно удалить символ новой строки в начале строки. В настоящее время я сделал следующее. Я хочу знать лучший способ сделать это. Спасибо.

s = "\naaaa\nbbbb"
s.sub!(/^\n?/, "")

Ответы [ 7 ]

21 голосов
/ 11 февраля 2012

lstrip, кажется, то, что вы хотите (при условии сохранения пробела):

>> s = "\naaaa\nbbbb" #=> "\naaaa\nbbbb"
>> s.lstrip #=> "aaaa\nbbbb"

Из документов:

Возвращает копию str с удаленными начальными пробелами. Смотрите также String # rstrip и String # strip.

http://ruby -doc.org / ядро-1.9.3 / String.html # метод-я-lstrip

11 голосов
/ 11 февраля 2012

strip удалит все завершающие пробелы

s = "\naaaa\nbbbb"
s.strip!

Небольшой хак для разбивания ведущих пробелов:

str = "\nmy string"
chomped_str = str.reverse.chomp.reverse
8 голосов
/ 11 февраля 2012

Итак, просто для пояснения, есть три способа сделать это: sub, reverse.chomp.reverse и lstrip.

Я бы рекомендовал против sub, потому чтоон немного менее читабелен, но также из-за того, как он работает: путем создания новой строки, которая наследуется от вашей старой строки.Кроме того, вам нужно регулярное выражение для чего-то довольно простого.

Итак, вы до reverse.chomp.reverse и lstrip.Скорее всего, вам нужен lstrip, потому что он немного быстрее, но имейте в виду, что операции strip не такие же, как операции chomp.strip удалит все начальные символы новой строки и пробелы:

"\n  aaa\nbbb".reverse.chomp.reverse  # => "  aaa\nbbb"
"\n  aaa\nbbb".lstrip                 # => "aaa\nbbb"

Если вы хотите убедиться, что вы удалили только один символ и что это определенно новая строка,используйте решение reverse.chomp.reverse.Если вы учитываете все начальные символы новой строки и пробелы, идите с lstrip.

Один случай, который я могу вспомнить для использования регулярных выражений, будет, если у вас есть неизвестное число \r s и \nв начале и хотите обрезать их все, но не трогайте пробелы.Вы можете использовать цикл и другие методы String для обрезки, но это будет просто уродливее.Влияние на производительность не имеет большого значения.

5 голосов
/ 11 февраля 2012
s.sub(/^[\n\r]*/, '')

При этом удаляются начальные символы новой строки (возврат каретки и перевод строки, как в chomp ), а не пробелы.

3 голосов
/ 11 февраля 2012

Не уверен, что это лучший способ, но вы можете попробовать:

s.reverse.chomp.reverse

, если вы хотите оставить завершающий символ новой строки (если он существует).

1 голос
/ 11 февраля 2012

Это должно работать для вас: s.strip.

0 голосов
/ 28 сентября 2016

Способ сделать это для пробельных или непробельных символов:

s = "\naaaa\nbbbb"
s.slice!("\n") # returns "\n" but s also has the first newline removed.
puts s # shows s has the first newline removed
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...