[Mono-dev] [PATCH] String.Split() broken behavior
Tyler Larson
mono-devel at tlarson.com
Fri Oct 5 20:32:09 EDT 2007
Hey Mono team:
This is my first time contributing, so please bear with me if I do
something dumb.
I've provided a patch for incorrect behavior in the String.Split()
function. In particular, String.Split(char[],int,StringSplitOptions)
behaves incorrectly when instructed to remove empty entries while also
limiting the size of the resultant array.
Take for example, the following code:
",a,,b,c".Split(new char[]{','},3,StringSplitOptions.RemoveEmptyEntries);
The existing implementation split the string into the following 3
components: {[], [], [a,,b,c]}
Then it scans the array and removes all empty entries, returning simply
{[a,,b,c]}
The correct behavior would be to remove empty entries while the string
was being split, and always return the maximum number of elements
possible. The *correct* result to the preceding example would be:
{[a],[b],[c]}
In order to do this correctly and efficiently, the InternalSplit
function had to be modified to be able to remove empty entries during
the split procedure; this included changing the signature to accept an
"options" parameter.
This patch also removes the need for further optimization of the
String.Split() call.
I'm a bit unsure about the coding style required; the .c file seemed to
be a bit of a combination of a few coding styles all together. Also, the
new InternalSplit function in this patch contains the line:
remempty = options & 0x01;
where 0x01 refers to the StringSplitOptions.RemoveEmptyEntries flag. I'm
sure there's a "better" way of indicating this; either by referencing
the enum somehow or with a #define somewhere. I don't know how you do
that sort of thing here.
The patch, as provided, DOES fix the broken code and works without any
trouble, but I would appreciate it if someone more familiar with the
Mono project would go over the changes and bring those style bits a bit
more into conformance with what is expected.
Cheers
-Tyler Larson
-------------- next part --------------
A non-text attachment was scrubbed...
Name: stringsplit.patch
Type: text/x-patch
Size: 8504 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20071005/99f00fad/attachment.bin
More information about the Mono-devel-list
mailing list