splitter for strings
Chris via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Jun 9 07:39:39 PDT 2014
On Monday, 9 June 2014 at 14:21:21 UTC, Steven Schveighoffer
wrote:
> On Mon, 09 Jun 2014 07:04:11 -0400, Chris <wendlec at 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
}
More information about the Digitalmars-d-learn
mailing list