indexOf's return val upon not found
Nick Sabalausky
a at a.a
Wed Jul 28 22:05:36 PDT 2010
"Nick Sabalausky" <a at a.a> wrote in message
news:i2r1nt$1egu$1 at digitalmars.com...
> Wouldn't it be better if std.string's indexOf/lastIndexOf returned
> haystack.length instead of -1 to indicate "not found"? The -1 is never
> really useful, but needs like this are fairly common:
>
> auto slice = str[str.indexOf(needle)..$];
>
> Which gives you an empty string if needle doesn't exist, which I find is
> usually exactly what I want anyway (and consistent with find's semantics,
> IIRC). But with the current semantics of indexOf/lastIndexOf, the risk of
> the occasional -1 forces the clean code above to be turned into something
> like this:
>
> auto needleIndex = str.indexOf(needle);
> auto slice = needleIndex==-1? "" : str[needleIndex..$];
>
> Yuck.
>
Another case where indexOf is currently awkward is if you want a slice of
str that strips off everything up until the first of a few possiblities. If
indexOf returned haystack.length upon not found, you could just do something
like this:
auto startIndex = min(str.indexOf("a"), str.indexOf("b"), str.indexOf("c"));
auto slice = str[startIndex..$];
With the current indexOf, the correct code is, well, quite a bit messier.
And this is one case where find doesn't provide quite as nice of a solution
either (unlike my first example which could probably be replaced entirely by
find).
More information about the Digitalmars-d
mailing list