On Monday, 9 June 2014 at 15:52:24 UTC, monarch_dodra wrote:
On Monday, 9 June 2014 at 15:19:05 UTC, Chris wrote:
On Monday, 9 June 2014 at 14:47:45 UTC, Steven Schveighoffer wrote:
On Mon, 09 Jun 2014 10:39:39 -0400, Chris <wend...@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, ['-', '+', '@'])

http://dlang.org/phobos/std_algorithm.html#strip

w = w.strip('-');
if (canFind(w, "-")) {
   ...

Uh, I see, I misread the signature of std.string.strip(). So that's one option now, to strip all trailing hyphens with std.string.strip(). Well, I'll give it a shot tomorrow.

Reply via email to