splitter for strings

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jun 9 07:21:21 PDT 2014


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


More information about the Digitalmars-d-learn mailing list