文字列から最後の文字を削除したい場合は、単に使用します
'string'[0..-1]
しかし、文字列から2番目の文字を削除するにはどうすればよいですか?
最も簡単な方法は
str[1] = '' #1.9.3
また
str[1,1] = '' #1.8.7
文字列の操作方法が異なるため、Jrubyで動作するかどうかはわかりません。うまくいかない場合は、 @Finbarr のメソッドを使用するとうまくいくはずです。
質問の横に、どの方法が最も速い方法であるかが今重要かもしれません。
他の回答とスライスを使用したソリューションでベンチマークを作成しました! とsub!
。
require 'benchmark'
N = 100_000 #Number of Test loop
STR = '0123456789'
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
私の結果(Windows、Ruby 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)
2番目の文字を削除し、残りの文字列を保持することを意味していると思います。
こんにちは=>hllo
s[0].chr+s[2..-1]
sin = 'string'
sout = sin[0] + sin[2..-1]