가장 간단한 해결책 gsub(/\s+/, ' ')
의 문제가 모든 공간을 대체대로, 아주 느린 것입니다, 그것은 하나의 경우에도. 그러나 일반적으로 단어 사이에는 1 개의 공백이 있고 순차적으로 2 개 이상의 공백이있는 경우에만 수정해야합니다.
더 나은 솔루션은 gsub(/[\r\n\t]/, ' ').gsub(/ {2,}/, ' ')
- 당신이 active_support
확장이다 String#squish
을 사용할 수 있습니다 레일 내에서 정상적인 공간
def method1(s) s.gsub!(/\s+/, ' '); s end
def method2(s) s.gsub!(/[\r\n\t]/, ' '); s.gsub!(/ {2,}/, ' '); s end
Benchmark.bm do |x|
n = 100_000
x.report('method1') { n.times { method1("Lorem ipsum\n\n dolor \t\t\tsit amet, consectetur\n \n\t\n adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.") } }
x.report('method2') { n.times { method2("Lorem ipsum\n\n dolor \t\t\tsit amet, consectetur\n \n\t\n adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.") } }
end;1
# user system total real
# method1 4.090000 0.010000 4.100000 ( 4.124844)
# method2 1.590000 0.010000 1.600000 ( 1.611443)
정답입니다. . :) –