Ruby 字符串切片索引: str [ n. 无穷大]

很简单的问题,但是在医生那里找不到。

如何将字符串或数组从 n切割到永远?

>> 'Austin'[1..3]
=> "ust"
>> 'Austin'[1..]
SyntaxError: compile error
(irb):2: syntax error, unexpected ']'
from (irb):2
55896 次浏览

Use -1 :-)

'Austin'[1..-1] # => "ustin"

Use reverse indexing:

[1..-1]

An element in Ruby (and some other languages) has straight forward index and a "reversed" one. So, string with length n has 0..(n-1) and additional (-n)..-1 indexes, but no more -- you can't use >=n or <-n indexes.

  'i' 'n'|'A' 'u' 's' 't' 'i' 'n'|'A' 'u' 's' 't' 'i' 'n'|'A' 'u' 's'
-8  -7  -6  -5  -4  -3  -2  -1   0   1   2   3   4   5   6   7   8
<- error |                you can use this               | error ->

If you assign the string to a variable, you can use length/size

string = 'Austin'
string[1..string.length]  # => ustin
string[1..string.size]    # => ustin

Pretty elegant using the endless range introduced in Ruby 2.6:

string = 'Austin'
string[1..] # => ustin

Hope that's handy for someone. Cuts a couple of characters from the best approach until now, and will be very readable once endless ranges are regularly adopted.