I have string: @address = \"10 Madison Avenue, New York, NY - (212) 538-1884\"
What\'s the best way to split it like this?
10 Madison Avenu
Even though @address.split(",",2)
is correct.
Running a benchmark for split
, partition
and a regex
solution such as @adress.match(/^([^,]+),\s*(.+)/)
showed that partition is a bit better than split
.
On a 2,6 GHz Intel Core i5, 16 GB RAM computer and 100_000
runs:
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)
break_at = @address.index(",") + 1
result = "<p>#{@address[0, break_at]}</p><p>#{@address[break_at..-1].strip}</p>"
rather:
break_at = @address.index(", ")
result = "<p>#{@address[0, break_at+1]}</p><p>#{@address[break_at+1..-1]}</p>"
String#split has a second argument, the maximum number of fields returned in the result array: http://ruby-doc.org/core/classes/String.html#M001165
@address.split(",", 2)
will return an array with two strings, split at the first occurrence of ",".
the rest of it is simply building the string using interpolation or if you want to have it more generic, a combination of Array#map
and #join
for example
@address.split(",", 2).map {|split| "<p>#{split}</p>" }.join("\n")