BGoetz
BGoetz

Reputation: 51

String.Split() method creates empty array spot

I am not a professional programmer, just FYI.

I am having trouble splitting a string. The resulting array has a length of 3, with the second spot (index 1) being completely empty.

I could manipulate the array to work the way I'd like, but I would rather understand why it is acting this way and code it properly from the beginning.

Dim defaultSetting() As String
Dim curSetting as String = "MENU_ITEM_ON_OPEN;;OPTIONAL_LEAVE"

defaultSetting = curSetting.Split(";;")
MsgBox(defaultSetting.Length) 'this is 3
MsgBox(defaultSetting(0)) 'this is as expected "MENU_ITEM_ON_OPEN"
MsgBox(defaultSetting(1)) 'this is empty and I do not know why
MsgBox(defaultSetting(2)) 'this is "OPTIONAL_LEAVE" and should be stored in defaultSetting(1)

Any help would be appreciated, thank you.

Upvotes: 1

Views: 588

Answers (2)

BGoetz
BGoetz

Reputation: 51

Thanks to a comment made by dbasnett I was able to find code that worked the way I was expecting, although I am not really sure why if anyone care to explain. But if not, this question has been answered, thanks.

defaultSetting = testString.Split(CType(";;", Char()), StringSplitOptions.RemoveEmptyEntries)

Upvotes: 0

MatSnow
MatSnow

Reputation: 7517

The problem here is that Option Strict is set to Off.

The overload of Split which is used expects a ParamArray of Char.
Because of this, the string ";;" is "silently" converted to a single char.

You can check this with following code:

Dim x As Char = ";;"
MsgBox(x)

You want to split by a string, which means you have to use another overload:

defaultSetting = curSetting.Split({";;"}, StringSplitOptions.None)

Upvotes: 2

Related Questions