我有这个字符串:"37:48.1234567"
(有一个冒号,那里有一个小数)
我需要删除小数中的所有内容并将其删除。
小数点前的数字可以是任意长度(即1:23:39.12357
)。
答案 0 :(得分:13)
str.split(".")[0]
希望有所帮助!
答案 1 :(得分:4)
到目前为止,我对这些解决方案做了一些基准测试。 我对解决方案进行了一些修改。
一个不明确的问题:1:23:39.123.57
的结果是什么? 1:23:39
或1:23:39.123
?
我选择1:23:39
,只有测试正则表达式有其他解决方案(参见Tims answer)
split
变体有2x2变体:[0]
或.first
,并使用第二个参数, 2
进行拆分。拆分的第二个参数限制了拆分元素的数量。我们只需要第一个,所以我们可以先分开休息。
紧致解决方案:split('.', 2)
。如果您使用first
或[0]
没有任何区别。我宁愿先。
结果(ruby 1.9.2p290
):
Rehearsal -------------------------------------------------
regex 0.141000 0.000000 0.141000 ( 0.140625)
regex2 0.125000 0.000000 0.125000 ( 0.125000)
split[0] 0.031000 0.000000 0.031000 ( 0.031250)
split[0],2 0.047000 0.000000 0.047000 ( 0.046875)
split.first 0.031000 0.000000 0.031000 ( 0.031250)
split.first,2 0.031000 0.000000 0.031000 ( 0.031250)
---------------------------------------- total: 0.406000sec
user system total real
regex 0.125000 0.000000 0.125000 ( 0.125000)
regex2 0.109000 0.015000 0.124000 ( 0.125000)
split[0] 0.031000 0.000000 0.031000 ( 0.031250)
split[0],2 0.032000 0.000000 0.032000 ( 0.031250)
split.first 0.047000 0.000000 0.047000 ( 0.046875)
split.first,2 0.031000 0.000000 0.031000 ( 0.031250)
结果(ruby 1.8.7p352
):
Rehearsal -------------------------------------------------
regex 0.060000 0.000000 0.060000 ( 0.060661)
regex2 0.050000 0.000000 0.050000 ( 0.049141)
split[0] 0.080000 0.000000 0.080000 ( 0.083703)
split[0],2 0.070000 0.000000 0.070000 ( 0.072780)
split.first 0.080000 0.000000 0.080000 ( 0.080419)
split.first,2 0.070000 0.000000 0.070000 ( 0.068370)
---------------------------------------- total: 0.410000sec
user system total real
regex 0.060000 0.000000 0.060000 ( 0.055427)
regex2 0.050000 0.000000 0.050000 ( 0.048538)
split[0] 0.080000 0.000000 0.080000 ( 0.084225)
split[0],2 0.070000 0.000000 0.070000 ( 0.071673)
split.first 0.070000 0.000000 0.070000 ( 0.079865)
split.first,2 0.060000 0.000000 0.060000 ( 0.068685)
基准:
require 'benchmark'
TESTDATA = %w{
37:48.1234567
1:23:39.12357
1:23:39.123.57
}
N = 10_000 #Number of Test loops
Benchmark.bmbm(10) {|b|
b.report('regex') { N.times { TESTDATA.each{|str| str.gsub(/\.[^.]*\Z/, '') }} }
b.report('regex2') { N.times { TESTDATA.each{|str| str.gsub(/\..*\Z/, '') }} }
b.report('split[0]') { N.times { TESTDATA.each{| str | str.split(".")[0] }} }
b.report('split[0],2') { N.times { TESTDATA.each{| str | str.split(".",2)[0] }} }
b.report('split.first') { N.times { TESTDATA.each{| str | str.split(".").first }} }
b.report('split.first,2') { N.times { TESTDATA.each{| str | str.split(".",2).first }} }
#~ b.report('') { N.times { TESTDATA.each{| str | }} }
#~ b.report('') { N.times { TESTDATA.each{|t| }} }
#~ b.report('') { N.times { TESTDATA.each{|t| }} }
} #Benchmark
答案 2 :(得分:3)
result = subject.gsub(/\.[^.]*\Z/, '')
正是如此。它确保如果有多个小数,则只会影响最后一个小数。