web-dev-qa-db-ja.com

最初のコンマを使用して文字列を段落に分割するにはどうすればよいですか?

私は文字列を持っています:@address = "10 Madison Avenue, New York, NY - (212) 538-1884"このように分割する最良の方法は何ですか?

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

String#splitには、結果配列で返されるフィールドの最大数である2番目の引数があります。 http://Ruby-doc.org/core/classes/String.html#M001165

@address.split(",", 2)は、「、」の最初の出現時に分割された2つの文字列を含む配列を返します。

残りの部分は、補間を使用して文字列を作成するだけです。より一般的なものにしたい場合は、たとえばArray#map#joinの組み合わせです。

@address.split(",", 2).map {|split| "<p>#{split}</p>" }.join("\n")
57
paukul
break_at = @address.index(",") + 1
result = "<p>#{@address[0, break_at]}</p><p>#{@address[break_at..-1].strip}</p>"
0
Dogbert

むしろ:

break_at = @address.index(", ")
result = "<p>#{@address[0, break_at+1]}</p><p>#{@address[break_at+1..-1]}</p>"
0

@address.split(",",2)は正しいですが。 splitpartitionおよび@adress.match(/^([^,]+),\s*(.+)/)などのregexソリューションのベンチマークを実行すると、パーティションがsplitよりも少し優れていることがわかりました。

2.6 GHz Intel Core i5では、16 GB RAMコンピューターおよび_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
zucaritask