通过x个字符获取Ruby中的子字符串

时间:2010-12-24 19:42:37

标签: ruby

我正在尝试生成一些Ruby代码,它将接受一个字符串并返回一个新的字符串,从其末尾删除x个字符 - 这些字符可以是实际的字母,数字,空格等。

例如:给出以下字符串

a_string = "a1wer4zx"

我需要一种简单的方法来获得相同的字符串,减去 - 比如说 - 最后3个字符。在上面的例子中,那将是“a1wer”。我现在这样做的方式似乎很复杂:

an_array = a_string.split(//,(a_string.length-2))
an_array.pop
new_string = an_array.join

有什么想法吗?

5 个答案:

答案 0 :(得分:99)

这个怎么样?

s[0, s.length - 3]

或者这个

s[0..-4]

修改

s = "abcdefghi"
puts s[0, s.length - 3]  # => abcdef
puts s[0..-4]            # => abcdef

答案 1 :(得分:12)

使用类似的东西:

s = "abcdef"
new_s = s[0..-2] # new_s = "abcde"

请在此处查看slice方法:http://ruby-doc.org/core/classes/String.html

答案 2 :(得分:4)

另一种选择可能是使用slice方法

a_string = "a1wer4zx"
a_string.slice(0..5) 
=> "a1wer4"   

文档:http://ruby-doc.org/core-2.5.0/String.html#method-i-slice

答案 3 :(得分:1)

另一种选择是获取字符串chars的列表,take x字符和join字符串:

[13] pry(main)> 'abcdef'.chars.take(2).join
=> "ab"
[14] pry(main)> 'abcdef'.chars.take(20).join
=> "abcdef"

答案 4 :(得分:0)

如果您需要它,可以使用firstsource code

s = '1234567890'
x = 4
s.first(s.length - x) # => "123456"

还有lastsource code

s.last(2) # => "90"

或者检查from/to