splitter for strings

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


On Monday, 9 June 2014 at 14:47:45 UTC, Steven Schveighoffer 
wrote:
> On Mon, 09 Jun 2014 10:39:39 -0400, Chris <wendlec at tcd.ie> 
> wrote:
>
>> 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.
>
> It's not mishandled. It's handled exactly as I would have 
> expected. If "blah-" and "blah" result in the same thing, then 
> how do you know the difference?
>
> Stripping any possible leading or trailing hyphens is much more 
> efficient than checking every single word to see if it's empty.
>
> However, if you have an instance of "--", your solution will 
> remove the extra empty string, whereas mine does not. Not sure 
> if that's important.
>
> -Steve

It is important. "blah--" should come out as "blah". The logic is 
along the following lines:

if (canFind(w, "-")) {
   auto parts = appender!(string[]);
   w.splitter('-').filter!(a => !a.empty).copy(parts);
   if (parts.data.length == 1) {
     // false alarm. Trailing hyphen
   }
}

The more common case is that it's not a trailing hyphen. 
std.string.strip() only works for whitespaces. Would be nice to 
have something like that for random characters. strip(s, '-') or 
strip(s, ['-', '+', '@'])


More information about the Digitalmars-d-learn mailing list