On Monday, 9 June 2014 at 14:21:21 UTC, Steven Schveighoffer
wrote:
On Mon, 09 Jun 2014 07:04:11 -0400, Chris <wend...@tcd.ie>
wrote:
On Monday, 9 June 2014 at 10:54:09 UTC, monarch_dodra wrote:
On Monday, 9 June 2014 at 10:23:16 UTC, Chris wrote:
Ok, thanks. I'll keep that in mind for the next version.
Seems to me to also work with 2.065 and 2.064.
From the library reference:
assert(equal(splitter("hello world", ' '), [ "hello", "",
"world" ]));
Note the 2 spaces between hello and world
and
"If a range with one separator is given, the result is a range
with two empty elements."
Right, it allows you to distinguish cases where the range
starts or ends with the separator.
My problem was that if I have input like
auto word = "bla-";
it will return parts.data.length == 2, so I would have to
check parts.data[1] != "". This is too awkward. I just want
the parts of the word, i.e.
length == 2 // grab [0] grab [1]
length == 1 // grab [0] (no second part, as in "bla-")
length > 2 // do something else
One thing you could do is strip any leading or trailing hyphens:
assert("-bla-".chomp("-").chompPrefix("-").split('-').length ==
1);
Just looked at std.string for a strip function that allows
custom character strippage, but apparently not there. The above
is quite awkward.
-Steve
Atm, I have
auto parts = appender!(string[]);
w.splitter('-').filter!(a => !a.empty).copy(parts);
Which looks more elegant and gives me what I want. IMO, the
module that handles the splitting of hyphenated words should be
able to deal with cases like "blah-" without the input being
prepared in a certain way. Now I have:
if (parts.data.length == 1) {
// false alarm. Trailing hyphen
}