|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
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.rubypal.com for details! |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
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 s Stefano |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Hi!
Take a look at Regexp class: http://www.ruby-doc.org/core/classes/Regexp.html ...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 |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
Jari,
> Is there any such solution? Here is a regular expression one: "longstring" =~ /^long/ HTH, Peter ___ http://www.rubyrailways.com http://scrubyt.org |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
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 |
|
![]() |
| Outils de la discussion | |
|
|