从ruby字符串中提取最后n个字符

And*_*imm 103 ruby string

为了n从字符串中获取最后一个字符,我假设您可以使用

ending = string[-n..-1]
Run Code Online (Sandbox Code Playgroud)

但是如果字符串长度小于n字母,那么你就得到了nil.

有哪些变通方法?

背景:字符串是纯ASCII,我可以访问ruby 1.9.1,我使用的是Plain Old Ruby Objects(没有Web框架).

per*_*iae 110

那么,我能想到的最简单的解决方法是:

ending = str[-n..-1] || str
Run Code Online (Sandbox Code Playgroud)

(编辑:or运算符的优先级低于赋值,因此请务必使用||.)

  • 答案很好,但它应该是`||`而不是`或`,或者在括号[-n ..- 1]或str`周围加上括号. (4认同)

Gar*_*eve 96

在这里你有一个衬垫,你可以放一个大于字符串大小的数字:

"123".split(//).last(5).to_s
Run Code Online (Sandbox Code Playgroud)

对于红宝石1.9+

"123".split(//).last(5).join("").to_s
Run Code Online (Sandbox Code Playgroud)

对于ruby 2.0+,join返回一个字符串

"123".split(//).last(5).join
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是最新版本的Ruby,则可以使用`chars`而不是split. (18认同)

Zac*_* Xu 49

在直接的Ruby(没有Rails)中,你可以做到

string.chars.last(n).join
Run Code Online (Sandbox Code Playgroud)

例如:

2.4.1 :009 > a = 'abcdefghij'
 => "abcdefghij"
2.4.1 :010 > a.chars.last(5).join
 => "fghij"
2.4.1 :011 > a.chars.last(100).join
 => "abcdefghij"
Run Code Online (Sandbox Code Playgroud)

如果您正在使用Ruby on Rails,则可以调用方法firstlast字符串对象.这些方法是优选的,因为它们简洁直观.

例如:

[1] pry(main)> a = 'abcdefg'                                                                                                                
 => "abcdefg"
[2] pry(main)> a.first(3)                                                                                                                   
 => "abc"
[3] pry(main)> a.last(4)                                                                                                                    
 => "defg"
Run Code Online (Sandbox Code Playgroud)


And*_*imm 13

ending = string.reverse[0...n].reverse
Run Code Online (Sandbox Code Playgroud)


小智 8

您可以使用以下代码:

string[string.length-n,string.length]
Run Code Online (Sandbox Code Playgroud)


Sun*_*nil 6

要从字符串中获取最后n个字符,您可以执行此操作

a [-n,n]如果a是数组.

如果您想要一个,这是一个例子.

ruby-1.9.2-p180:006> a ="911234567890"

>>"911234567890"

ruby-1.9.2-p180:009> a [-5,5]

=>"67890"

ruby-1.9.2-p180:010> a [-7,7]

> \n"4567890"


EmF*_*mFi 5

你试过一个正则表达式吗?

string.match(/(.{0,#{n}}$)/)
ending=$1
Run Code Online (Sandbox Code Playgroud)

正则表达式在字符串的末尾捕获尽可能多的字符,但不超过n.并以1美元的价格存储.