[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Start of string?

Jari Williamsson

11/6/2007 12:31:00 PM

What't the most elegant way to find a substring match at the very start
of a string?

Currently I'm using this approach:
a = "long string"
key = "long"
if a[0, key.length] == key then

...while this might look ok, it doesn't look so good with constant strings:
if a[0, 4] == "long" then
or
if a[0, "long".length] == "long" then

I guess what I'm looking for is something like:
if a.startswith("long") then

Is there any such solution?


Best regards,

Jari Williamsson

6 Answers

David A. Black

11/6/2007 1:02:00 PM

0

Hi --

On Tue, 6 Nov 2007, Jari Williamsson wrote:

> What't the most elegant way to find a substring match at the very start of a
> string?
>
> Currently I'm using this approach:
> a = "long string"
> key = "long"
> if a[0, key.length] == key then
>
> ...while this might look ok, it doesn't look so good with constant strings:
> if a[0, 4] == "long" then
> or
> if a[0, "long".length] == "long" then
>
> I guess what I'm looking for is something like:
> if a.startswith("long") then
>
> Is there any such solution?

You could do:

if a.index("long") == 0


David

--
Upcoming training by David A. Black/Ruby Power and Light, LLC:
* Advancing With Rails, Edison, NJ, November 6-9
* Advancing With Rails, Berlin, Germany, November 19-22
* Intro to Rails, London, UK, December 3-6 (by Skills Matter)
See http://www.r... for details!

Stefano Crocco

11/6/2007 1:08:00 PM

0

Alle marted=EC 6 novembre 2007, Jari Williamsson ha scritto:
> What't the most elegant way to find a substring match at the very start
> of a string?
>
> Currently I'm using this approach:
> a =3D "long string"
> key =3D "long"
> if a[0, key.length] =3D=3D key then
>
> ...while this might look ok, it doesn't look so good with constant string=
s:
> if a[0, 4] =3D=3D "long" then
> or
> if a[0, "long".length] =3D=3D "long" then
>
> I guess what I'm looking for is something like:
> if a.startswith("long") then
>
> Is there any such solution?
>
>
> Best regards,
>
> Jari Williamsson

You can use a regexp:

if a.match /^long/ then
=2E..

The ^ at the beginning of the regexp means that the regexp should be matche=
d=20
at the beginning of the string (actually, of the line. If your string is=20
multiline, you need to use \A to match the beginning of the string).

If the string you want to look for is stored in a variable, you can use str=
ing=20
interpolation inside the regexp:

str =3D "long"
if a.match /^#{str}/ then

Of course, this can cause problems if str contains characters which are=20
special in a regexp. In this case, you need to quote it:

str =3D "long"
if a.match /^#{Regexp.quote(str)}/ then


I hope this helps

Stefano

gbence

11/6/2007 1:09:00 PM

0

Hi!

Take a look at Regexp class:

http://www.ruby-doc.org/core/classes/R...

...after that your starts_with? method should be similar to this one:

class String
def starts_with?(a_string)
self =~ Regexp.new('^%s' % [ a_string ])
end
end

a = "long string"
a.starts_with?("long") # => 0
a.starts_with?("not soo long") # => nil

!note: in ruby 0 (Fixnum) means true in a condition, so does ""
(String), but nil (NilClass) means false.

Cheers, Bence

Jari Williamsson wrote:
> What't the most elegant way to find a substring match at the very start
> of a string?
>
> Currently I'm using this approach:
> a = "long string"
> key = "long"
> if a[0, key.length] == key then
>
> ...while this might look ok, it doesn't look so good with constant strings:
> if a[0, 4] == "long" then
> or
> if a[0, "long".length] == "long" then
>
> I guess what I'm looking for is something like:
> if a.startswith("long") then
>
> Is there any such solution?
>
>
> Best regards,
>
> Jari Williamsson


Peter Szinek

11/6/2007 1:13:00 PM

0

Jari,

> Is there any such solution?

Here is a regular expression one:

"longstring" =~ /^long/

HTH,
Peter
___
http://www.rubyra...
http://s...


Arlen Cuss

11/6/2007 1:18:00 PM

0


On Tue, 2007-11-06 at 21:30 +0900, Jari Williamsson wrote:
> What't the most elegant way to find a substring match at the very start
> of a string?
>
> Currently I'm using this approach:
> a = "long string"
> key = "long"
> if a[0, key.length] == key then
>
> ...while this might look ok, it doesn't look so good with constant strings:
> if a[0, 4] == "long" then
> or
> if a[0, "long".length] == "long" then
>
> I guess what I'm looking for is something like:
> if a.startswith("long") then
>
> Is there any such solution?
>
>
> Best regards,
>
> Jari Williamsson

How about;

if /^long/.match a

if a.match /^long/

if a.index('long').zero?

The last one probably has the best portability for your non-constant
keys.

Arlen


Nobuyoshi Nakada

11/6/2007 3:55:00 PM

0

Hi,

At Tue, 6 Nov 2007 22:02:27 +0900,
David A. Black wrote in [ruby-talk:277691]:
> You could do:
>
> if a.index("long") == 0

rindex("long", 0) is faster for long but unmatching strings.

--
Nobu Nakada