Get remaing characters in a string


#1

Hi.

I need to get the last three characters in a string. I couldn’t find a
function in the String class so I came up with this:

class Remainder

attr_writer :n

def initialize(t = “”, n = 0)
@t = t.to_s
@n = n.to_i
end

def get
get_remaining_letters
end

private
def get_remaining_letters
s = @t.size
if s < @n
r = 0
else
r = s - @n
end

ft = @t.slice(r, @n)
end

end

t = Remainder.new(“Guttesen”, 5)
puts t.get
tesen
t.n = 4
puts t.get
esen

Did I reinvent the wheel or does it make sense to add it to String?

regards
Claus


#2

On 2007-01-07 01:21:54 +0100, “Claus G.” removed_email_address@domain.invalid said:

Hi.

I need to get the last three characters in a string. I couldn’t find a
function in the String class so I came up with this:

Did I reinvent the wheel or does it make sense to add it to String?

I’d just do str.slice!(-n … -1) instead:

str = “Hello World”
str.slice!(-3 … -1) # => “rld”
str # => “Hello Wo”
str.slice!(-1 … -1) # => “o”
str # => “Hello W”


#3

You can use String#[] with a Range instead:

“asdfhsdfabc”[-3…-1]
=> “abc”

or you can specify the length:

“asdfhsdfabc”[-3, 3]
=> “abc”

Negative numbers count from the end of the string. So basically the
strings length plus your negative number is the position from the start
of the string.

Dan


#4

I need to get the last three characters in a string. I couldn’t find a
function in the String class so I came up with this:

You can index strings from the right with negative numbers:

“abcdef”[-3…-1] => “def”

I think that might be all you need.

I see. Thank you very much for all the replies.

regards
Claus


#5

Claus G. wrote:

@t = t.to_s
if s < @n

Claus
If the length of the string is less than 3,
the entire string will be returned.

s = “ab”
s[ /.{0,3}$/ ]
s[-3,3] || s


#6

On Sun, 7 Jan 2007, Claus G. wrote:

@t = t.to_s
if s < @n

t = Remainder.new(“Guttesen”, 5)
puts t.get
tesen
t.n = 4
puts t.get
esen

Did I reinvent the wheel or does it make sense to add it to String?

You can index strings from the right with negative numbers:

“abcdef”[-3…-1] => “def”

I think that might be all you need.

David