Reputation: 965
I'm trying to produce some Ruby code that will take a string and return a new one, with a number x number of characters removed from its end - these can be actual letters, numbers, spaces etc.
Ex: given the following string
a_string = "a1wer4zx"
I need a simple way to get the same string, minus - say - the 3 last characters. In the case above, that would be "a1wer". The way I'm doing it right now seems very convoluted:
an_array = a_string.split(//,(a_string.length-2))
an_array.pop
new_string = an_array.join
Any ideas?
Upvotes: 64
Views: 131713
Reputation: 21
I know a lot of people already said this, but I think the best option is this:
'abcdefg'[0..-4] # should return 'abcd'
Something important to realize is that the returned string is inclusive on both endpoints. A lot of string parsing methods (e.g., the java and javascript substring method) are inclusive on the first endpoint and exclusive on the last, but this is NOT the case with the above way.
'abcdefghijklm'[1..5] # returns 'bcdef'
// substring method in java or javascript returns 'bcde'
'abcdefghijklm'.substring(1, 5);
Upvotes: 2
Reputation: 22331
Another option could be to use the slice
method
a_string = "a1wer4zx"
a_string.slice(0..5)
=> "a1wer4"
Documentation: http://ruby-doc.org/core-2.5.0/String.html#method-i-slice
Upvotes: 8
Reputation: 2945
if you need it in rails you can use first (source code)
s = '1234567890'
x = 4
s.first(s.length - x) # => "123456"
there is also last (source code)
s.last(2) # => "90"
alternatively check from/to
Upvotes: 3
Reputation: 2051
Another option is getting the list of chars
of the string, take
ing x chars and join
ing back to a string:
[13] pry(main)> 'abcdef'.chars.take(2).join
=> "ab"
[14] pry(main)> 'abcdef'.chars.take(20).join
=> "abcdef"
Upvotes: 2
Reputation: 26230
Use something like this:
s = "abcdef"
new_s = s[0..-2] # new_s = "abcde"
See the slice
method here: http://ruby-doc.org/core/classes/String.html
Upvotes: 18
Reputation: 68046
How about this?
s[0, s.length - 3]
Or this
s[0..-4]
edit
s = "abcdefghi"
puts s[0, s.length - 3] # => abcdef
puts s[0..-4] # => abcdef
Upvotes: 131