Как разбить строку на абзацы с помощью первой запятой? - PullRequest
28 голосов
/ 06 июля 2011

У меня есть строка: @address = "10 Madison Avenue, New York, NY - (212) 538-1884" Какой лучший способ разделить это?

<p>10 Madison Avenue,</p>
<p>New York, NY - (212) 538-1884</p>

Ответы [ 4 ]

56 голосов
/ 06 июля 2011

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")
0 голосов
/ 24 октября 2014

Даже если @address.split(",",2) правильно.Выполнение теста для split, partition и решения regex, такого как @adress.match(/^([^,]+),\s*(.+)/), показало, что раздел немного лучше, чем split.

на Intel Core i5 с частотой 2,6 ГГц,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)

0 голосов
/ 06 июля 2011

скорее:

break_at = @address.index(", ")
result = "<p>#{@address[0, break_at+1]}</p><p>#{@address[break_at+1..-1]}</p>"
0 голосов
/ 06 июля 2011
break_at = @address.index(",") + 1
result = "<p>#{@address[0, break_at]}</p><p>#{@address[break_at..-1].strip}</p>"
...