2012-05-22 86 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

贏的基準! –

相關問題