Ruby 字符串操作

Ruby 字符串操作,ruby,string,Ruby,String,可以肯定的是,有多种方法可以将以下字符串从左到右或从左到右进行转换 "content-management-systems" <=> "Content Management Systems" “内容管理系统”“内容管理系统” 这里的ruby方式是什么?这是一种棘手的方式: puts "content-management-systems".split("-").map(&:capitalize).join(" "). tap{ |str| puts str}.

可以肯定的是,有多种方法可以将以下字符串从左到右或从左到右进行转换

"content-management-systems" <=> "Content Management Systems"
“内容管理系统”“内容管理系统”
这里的ruby方式是什么?

这是一种棘手的方式:

puts "content-management-systems".split("-").map(&:capitalize).join(" ").
     tap{ |str| puts str}.
     split.map(&:downcase).join("-")

#=> Content Management Systems
#=> content-management-systems
简化的变体:

"content-management-systems".split("-").map(&:capitalize).join(" ") 
#=> Content Management Systems

"Content Management Systems".split.map(&:downcase).join("-")
#=> content-management-systems
清洁型(来自Micheal):


gsub
regexp匹配可以在块模式下操作

"content-management-systems".
  gsub(/(\w+)(-)?/) { ($2 ? $1 + " " : $1).capitalize! }.
  gsub(/(\w+)(\s)?/) { ($2 ? $1 + "-" : $1).downcase! }
正如这些基准测试所显示的,regexp和 noregexp版本

require 'benchmark'

STR = "content-management-systems".freeze

Benchmark.bmbm(10) do |x|
  x.report("noregexp") {
    STR.split("-").map(&:capitalize).join(" ").
    split(" ").map(&:downcase).join("-")
  }

  x.report("rgexp") {
    STR.
    gsub(/(\w+)(-)?/) { ($2 ? $1 + " " : $1).capitalize! }.
    gsub(/(\w+)(\s)?/) { ($2 ? $1 + "-" : $1).downcase! }
  }
end

__END__

Rehearsal ----------------------------------------------
noregexp     0.000000   0.000000   0.000000 (  0.000032)
rgexp        0.000000   0.000000   0.000000 (  0.000035)
------------------------------------- total: 0.000000sec

                 user     system      total        real
noregexp     0.000000   0.000000   0.000000 (  0.000051)
rgexp        0.000000   0.000000   0.000000 (  0.000058)

我发布这篇文章只是为了记住。。。 正则表达式只需加倍计算时间:

1.9.2p290 :014 > time = Benchmark.measure do
1.9.2p290 :015 >     puts "content-management-systems".split("-").map(&:capitalize).join(" ").
1.9.2p290 :016 >          tap{ |str| puts str}.
1.9.2p290 :017 >          split.map(&:downcase).join("-")
1.9.2p290 :018?>   end
Content Management Systems
content-management-systems
 =>   0.000000   0.000000   0.000000 (  0.000077)

1.9.2p290 :019 > time = Benchmark.measure do
1.9.2p290 :020 >     "content-management-systems".gsub(/(\w+)(-)?/) { ($2 ? $1 + " " : $1).capitalize! }
1.9.2p290 :021?>   "Content Management Systems".gsub(/(\w+)(\s)?/) { ($2 ? $1 + "-" : $1).downcase! }
1.9.2p290 :022?>   end
 =>   0.000000   0.000000   0.000000 (  0.000164)

我要感谢所有的贡献:-)

呃,对不起,你能重新表述一下这个问题吗?它根本没有意义,即使是字符串“内容管理系统”,你如何用Ruby获得“内容管理系统”字符串?然后给出了“内容管理系统”如何获得“内容管理系统”以及完整的往返过程:
“内容管理系统”。拆分(“-”).map(&:capitalize)。join(“”)。拆分(“”)。map(&:downcase)。join(“-”)
Wow!太棒了,你们这些石头!谢谢你的数据!Regexp从来没有手动操作那么快,但它非常奇特。。。如果你知道regexp,也许编码速度会更快well@LucaSoave,在这种情况下,您不需要使用'tap{str | puts str}@megas correct,在这种情况下甚至更快(0.000010)
1.9.2p290 :014 > time = Benchmark.measure do
1.9.2p290 :015 >     puts "content-management-systems".split("-").map(&:capitalize).join(" ").
1.9.2p290 :016 >          tap{ |str| puts str}.
1.9.2p290 :017 >          split.map(&:downcase).join("-")
1.9.2p290 :018?>   end
Content Management Systems
content-management-systems
 =>   0.000000   0.000000   0.000000 (  0.000077)

1.9.2p290 :019 > time = Benchmark.measure do
1.9.2p290 :020 >     "content-management-systems".gsub(/(\w+)(-)?/) { ($2 ? $1 + " " : $1).capitalize! }
1.9.2p290 :021?>   "Content Management Systems".gsub(/(\w+)(\s)?/) { ($2 ? $1 + "-" : $1).downcase! }
1.9.2p290 :022?>   end
 =>   0.000000   0.000000   0.000000 (  0.000164)