Как разбить строку на абзацы с использованием первой запятой?
У меня строка: @address = "10 Madison Avenue, New York, NY - (212) 538-1884"
Какой лучший способ разбить его так?
<p>10 Madison Avenue,</p>
<p>New York, NY - (212) 538-1884</p>
Ответы
Ответ 1
String # split имеет второй аргумент, максимальное количество полей, возвращаемых в массив результатов:
http://ruby-doc.org/core/classes/String.html#M001165
@address.split(",", 2)
будет возвращать массив с двумя строками, разделенный при первом появлении ",".
остальная часть просто строит строку с использованием интерполяции или если вы хотите, чтобы она была более общей, комбинация Array#map
и #join
, например
@address.split(",", 2).map {|split| "<p>#{split}</p>" }.join("\n")
Ответ 2
break_at = @address.index(",") + 1
result = "<p>#{@address[0, break_at]}</p><p>#{@address[break_at..-1].strip}</p>"
Ответ 3
а
break_at = @address.index(", ")
result = "<p>#{@address[0, break_at+1]}</p><p>#{@address[break_at+1..-1]}</p>"
Ответ 4
Даже если @address.split(",",2)
верен.
Запуск теста для split
, partition
и решения regex
, такого как @adress.match(/^([^,]+),\s*(.+)/)
, показал, что раздел немного лучше, чем split
.
На 2,6 ГГц Intel Core i5, 16 ГБ оперативной памяти и 100_000
работает:
user system total real
partition 0.690000 0.000000 0.690000 ( 0.697015)
regex 1.910000 0.000000 1.910000 ( 1.908033)
split 0.780000 0.010000 0.790000 ( 0.788240)