2012-05-22 67 views
-1

如果我想最后一个字符从字符串中删除,那么我只需使用如何从字符串中删除第二个字符?

'string'[0..-1] 

但是我怎么删除字符串中的第二个字符?

+2

我不想投了,因为我不想成为平均值,但你别想了吗?还是你读过任何书或文档? – texasbruce

+0

''string'[0 ..- 1]'不会删除该字符。它将所有字符返回到字符串的末尾。 ''string'[0 ..- 1] =>“string”' –

回答

2

我假设你的意思是删除第二个字符并保留字符串的其余部分。

你好=> hllo

s[0].chr+s[2..-1]

+2

我在阅读理解失败:D。 +1 –

+0

谢谢,很酷 – user984621

1
sin = 'string' 
sout = sin[0] + sin[2..-1] 
5

最简单的方法是

str[1] = '' #1.9.3 

str[1,1] = '' #1.8.7 

我不知道它是否会在JRuby的工作,因为它有不同的操纵方式。如果它不起作用,使用@Finbarr的方法,它应该工作。

3

除了问题如何它可能很重要,现在哪个是最快的方法。

我做了一个与其他答案和切片解决方案的基准!和sub!

require 'benchmark' 
N = 100_000 #Number of Test loop 

STR = '' 

REGEXP = /\A(.)./ 
Benchmark.bmbm(10) {|b| 

    b.report('str[0].chr+str[2..-1]') { N.times { 
     str = STR.dup 
     str = str[0].chr+str[2..-1] 
     }} 
    b.report('str[1]') { N.times { 
     str = STR.dup 
     str[1] = '' 
     }} 
    b.report('slice!') { N.times { 
     str = STR.dup 
     str.slice!(1) 
     }}   
    b.report('sub!') { N.times { 
     str = STR.dup 
     str.sub!(/\A(.)./, '\1') 
     }}   
    b.report('sub!/REGEXP') { N.times { 
     str = STR.dup 
     str.sub!(REGEXP, '\1') #Avoid reinitialization of regex for each loop 
     }} 
} #Benchmark 

我的结果(窗口,红宝石1.9.3)

Rehearsal --------------------------------------------------------- 
str[0].chr+str[2..-1] 0.203000 0.000000 0.203000 ( 0.171875) 
str[1]     0.094000 0.000000 0.094000 ( 0.109375) 
slice!     0.094000 0.000000 0.094000 ( 0.125000) 
sub!     0.250000 0.016000 0.266000 ( 0.265625) 
sub!/REGEXP    0.265000 0.016000 0.281000 ( 0.234375) 
------------------------------------------------ total: 0.938000sec 

          user  system  total  real 
str[0].chr+str[2..-1] 0.188000 0.000000 0.188000 ( 0.171875) 
str[1]     0.125000 0.000000 0.125000 ( 0.109375) 
slice!     0.172000 0.000000 0.172000 ( 0.125000) 
sub!     0.218000 0.015000 0.233000 ( 0.265625) 
sub!/REGEXP    0.282000 0.000000 0.282000 ( 0.250000) 
+0

赢的基准! –

相关问题