www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Removing whitespace duplicates

reply =?UTF-8?B?Ik5vcmRsw7Z3Ig==?= <per.nordlow gmail.com> writes:
How can I extend

string line = "car    wash";

line.strip.splitter!isWhite.joiner("_").to!string

so that

car   wash

becomes

car_wash

and not

car___wash

?

Used at https://github.com/nordlow/justd/blob/master/knet.d#L1142
Oct 20 2014
next sibling parent =?UTF-8?B?Ik5vcmRsw7Z3Ig==?= <per.nordlow gmail.com> writes:
On Monday, 20 October 2014 at 20:27:19 UTC, Nordlöw wrote:
 line.strip.splitter!isWhite.joiner("_").to!string
Doh, that was too easy: line.strip.splitter!isWhite.filter!(a => !a.empty).joiner(lineSeparator).to!S; Sorry, for being lazy ;)
Oct 20 2014
prev sibling parent reply "bearophile" <bearophileHUGS lycos.com> writes:
Nordlöw:

 How can I extend

 string line = "car    wash";

 line.strip.splitter!isWhite.joiner("_").to!string

 so that

 car   wash

 becomes

 car_wash

 and not

 car___wash

 ?
Use std.string.tr. Bye, bearophile
Oct 20 2014
parent reply Justin Whear <justin economicmodeling.com> writes:
On Mon, 20 Oct 2014 22:21:09 +0000, bearophile wrote:

 Use std.string.tr.
 
 Bye,
 bearophile
std.string.squeeze might be more appropriate.
Oct 20 2014
parent reply "bearophile" <bearophileHUGS lycos.com> writes:
Justin Whear:

 std.string.squeeze might be more appropriate.
But with tr you can also replace the spaces with the underscore. Bye, bearophile
Oct 20 2014
parent reply =?UTF-8?B?Ik5vcmRsw7Z3Ig==?= <per.nordlow gmail.com> writes:
On Monday, 20 October 2014 at 23:25:18 UTC, bearophile wrote:
 But with tr you can also replace the spaces with the underscore.
std.string.tr is my preferred choice here :) Thanks!
Oct 21 2014
parent reply =?UTF-8?B?Ik5vcmRsw7Z3Ig==?= <per.nordlow gmail.com> writes:
On Tuesday, 21 October 2014 at 07:31:59 UTC, Nordlöw wrote:
 std.string.tr is my preferred choice here :)
It would be nice to have a lambda-variant of std.string.tr to call like x.tr!isWhite(['_'])
Oct 21 2014
parent reply "bearophile" <bearophileHUGS lycos.com> writes:
Nordlöw:

 It would be nice to have a lambda-variant of std.string.tr to 
 call like

 x.tr!isWhite(['_'])
If your text is ASCII, then there is std.ascii.whitespace that can be given as argument to std.string.tr. Bye, bearophile
Oct 21 2014
parent reply =?UTF-8?B?Ik5vcmRsw7Z3Ig==?= <per.nordlow gmail.com> writes:
On Tuesday, 21 October 2014 at 08:04:13 UTC, bearophile wrote:
 If your text is ASCII, then there is std.ascii.whitespace that 
 can be given as argument to std.string.tr.

 Bye,
 bearophile
http://dlang.org/phobos/std_ascii.html#.whitespace is of string but std.string.tr needs [string] as argument. How does that work?
Oct 22 2014
parent "Ola Fosheim =?UTF-8?B?R3LDuHN0YWQi?= writes:
On Wednesday, 22 October 2014 at 19:00:36 UTC, Nordlöw wrote:
 On Tuesday, 21 October 2014 at 08:04:13 UTC, bearophile wrote:
 If your text is ASCII, then there is std.ascii.whitespace that 
 can be given as argument to std.string.tr.

 Bye,
 bearophile
http://dlang.org/phobos/std_ascii.html#.whitespace is of string but std.string.tr needs [string] as argument. How does that work?
string a = "test \t \t test"; writeln(a.tr(std.ascii.whitespace,"_","s"));
Oct 22 2014