splitter for strings
monarch_dodra via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Jun 9 08:52:22 PDT 2014
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 <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, ['-', '+', '@'])
http://dlang.org/phobos/std_algorithm.html#strip
w = w.strip('-');
if (canFind(w, "-")) {
...
More information about the Digitalmars-d-learn
mailing list