|
|
rtrim and ltrim function for ruby: is this ok? #2
I made these two functions to extend the default String object:
class String
def rtrim(character)
if self[-1, 1] == character.to_s
self[0, self.length - 1]
end
return self
end
def ltrim(character)
if self[0, 1] == character.to_s
self[1, self.length]
end
return self
end
end
Are they ok? I mean, aren't there any default Ruby functions I am
copying? I looked on google for functions that did the same as above
functions, but I couldn't find any for Ruby.
Thanks in advance!
|
|
0
|
|
|
|
Reply
|
leon160 (34)
|
7/25/2007 7:26:47 PM |
|
Pfff... Sorry for the second post. I couldn't find the first one on
Google groups.
I tried changing the self object. But I wasn't allowed to do it. I got
an error message when I did that:
"Can't change the value of self"
So I changed it to:
class String
def rtrim(character)
ret = self
if self[-1, 1] == character.to_s
ret = self[0, self.length - 1]
end
return ret
end
def ltrim(character)
if self[0, 1] == character.to_s
ret = self[1, self.length]
end
return ret
end
end
This works. But I would rather see the first object changed. Is this
possible?
|
|
0
|
|
|
|
Reply
|
leon160 (34)
|
7/25/2007 7:38:25 PM
|
|
Ow yeah. rstrip and lstrip only strip spaces (and maybe line-endings).
I also want to use it for other characters.
|
|
0
|
|
|
|
Reply
|
leon160 (34)
|
7/25/2007 7:40:17 PM
|
|
On 7/25/07, LeonB <leon@tim-online.nl> wrote:
> Pfff... Sorry for the second post. I couldn't find the first one on
> Google groups.
> I tried changing the self object. But I wasn't allowed to do it. I got
> an error message when I did that:
> "Can't change the value of self"
>
> So I changed it to:
>
> class String
> def rtrim(character)
>
> ret = self
> if self[-1, 1] == character.to_s
> ret = self[0, self.length - 1]
> end
> return ret
> end
>
> def ltrim(character)
> if self[0, 1] == character.to_s
> ret = self[1, self.length]
> end
> return ret
> end
> end
>
> This works. But I would rather see the first object changed. Is this
> possible?
Leon, look at String#slice!
Todd
|
|
0
|
|
|
|
Reply
|
caduceass (829)
|
7/25/2007 7:51:45 PM
|
|
Leon Bogaert wrote:
> This works. But I would rather see the first object changed. Is this
> possible?
I would argue that ltrim and rtrim should not remove one character, but
a sequence of the given character. The following code probably does
not meet all ruby conventions, but it does what you request and it does
reserve ! for its intended purpose.
class String
def rtrim!(character)
n = 0
while (self[-(n+1), 1] == character.to_s)
n +=1
end
self.slice!(self.length - n,n) if n > 0
end
def ltrim!(character)
n = 0
while (self[n, 1] == character.to_s)
n += 1
end
self.slice!(0 , n) if n > 0
end
end
s = "aaaaaabacbccccc"
p s
s.rtrim!("c")
p s
s.ltrim!("b")
p s
s.ltrim!("a")
p s
Ian
--
Posted via http://www.ruby-forum.com/.
|
|
0
|
|
|
|
Reply
|
iw1junk (1195)
|
7/25/2007 11:39:55 PM
|
|
On 7/26/07, Ian Whitlock <iw1junk@comcast.net> wrote:
> Leon Bogaert wrote:
> > This works. But I would rather see the first object changed. Is this
> > possible?
>
> I would argue that ltrim and rtrim should not remove one character, but
> a sequence of the given character. The following code probably does
> not meet all ruby conventions, but it does what you request and it does
> reserve ! for its intended purpose.
Since we got the power of regex/gsub, let's use it :)
class String
def rtrim(char)
dump.rtrim!(char)
end
def rtrim!(char)
gsub!(/#{Regexp.escape(char)}+$/, '')
end
def ltrim(char)
dump.ltrim!(char)
end
def ltrim!(char)
gsub!(/^#{Regexp.escape(char)}+/, '')
end
end
s = "aaaaaabacbccccc"
p s
s.rtrim!("c")
p s
s.ltrim!("b")
p s
s.ltrim!("a")
p s
|
|
0
|
|
|
|
Reply
|
m.fellinger (252)
|
7/26/2007 2:00:27 AM
|
|
Michael Fellinger wrote:
> Since we got the power of regex/gsub, let's use it :)
Michael,
Thanks. I agree that in practice your code is better.
I am a newbie who does not yet feel comfortable with
regular expressions, but I see what you have done.
Ian
--
Posted via http://www.ruby-forum.com/.
|
|
0
|
|
|
|
Reply
|
iw1junk (1195)
|
7/26/2007 4:26:50 PM
|
|
|
6 Replies
47 Views
(page loaded in 0.091 seconds)
|
|
|
|
|
|
|
|
|