On Friday, 17 February 2012 at 00:47:35 UTC, bioinfornatics wrote:
Le vendredi 17 février 2012 à 01:33 +0100, bioinfornatics a
écrit :
reading
http://www.d-programming-language.org/phobos/std_array.html#split
---------------------------------------------------
S[] split(S)(S s); // merge space together
and
Unqual!(S1)[] split(S1, S2)(S1 s, S2 delim); // do not merge
delim
together ?
---------------------------------------------------
why the second split function do not merge delim together?
how merge delim together?
Code to try
----------------------
import std.string;
import std.stdio;
import std.array;
void main( ){
string test = "hi\t\tD is fun";
string test2= "hi D is fun";
writeln( test.split("\t"));
writeln( test2.split() );
writeln( test2.split(" ") );
}
----------------------
Result
["hi", "", "D is fun"]
["hi", "D", "is", "fun"]
["hi", "", "D", "is", "fun"]
I was talking with bioinfornatics on IRC so I can clarify a bit
of what he's saying. std.array.split without delimiter merges
runs of adjacent whitespace. In the version where you can
specify the delimiter runs are not merged leaving empty items in
the resulting array. This is because the delimiter specifying
version just calls std.algorithm.splitter which doesn't merge
runs whereas the whitespace version of std.array.split uses its
own internal algorithm to split.
Although the delimiter specifiable version's documentation
doesn't say it would merge runs, one would assume it'd behave
like its whitespace only cousin.
Either the docs should be clarified or the function should be
changed to work like the other version (I prefer the latter
solution).
Regards,
Brad Anderson