Getting a substring in Ruby by x number of chars

Ruby

Ruby Problem Overview


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?

Ruby Solutions


Solution 1 - Ruby

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

Solution 2 - Ruby

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>

Solution 3 - Ruby

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

Solution 4 - Ruby

Another option is getting the list of chars of the string, takeing x chars and joining back to a string:

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

Solution 5 - Ruby

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionwotaskdView Question on Stackoverflow
Solution 1 - RubyNikita RybakView Answer on Stackoverflow
Solution 2 - RubyBrian ClapperView Answer on Stackoverflow
Solution 3 - RubyPaulo FidalgoView Answer on Stackoverflow
Solution 4 - RubyLeo BritoView Answer on Stackoverflow
Solution 5 - RubyAray KarjauvView Answer on Stackoverflow