splitter for strings

Chris via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jun 9 04:40:23 PDT 2014


On Monday, 9 June 2014 at 11:16:18 UTC, monarch_dodra wrote:
> On Monday, 9 June 2014 at 11:04:12 UTC, Chris wrote:
>> From the library reference:
>>
>> assert(equal(splitter("hello  world", ' '), [ "hello", "", 
>> "world" ]));
>>
>> and
>>
>> "If a range with one separator is given, the result is a range 
>> with two empty elements."
>>
>> 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
>
> You can just pipe in an extra "filter!(a=>!a.empty)", and it'll 
> do what you want:
> put(parts, w.splitter('-').filter!(a=>!a.empty)());
>
> The rational for this behavior, is that it preserves the "total 
> amount of information" from your input. EG:
>
> assert(equal(myString.spliter(sep).join(sep), myString));
>
> If the empty tokens were all stripped out, that wouldn't work, 
> you'd have lost information about how many separators there 
> actually were, and where they were.

I see, I've already popped in a filter. I only wonder how much of 
a performance loss that is. Probably negligible.


More information about the Digitalmars-d-learn mailing list