我有以下内容
string.Join(ClientAPI.COLUMN_DELIMITER),(new string[] {"1", "2" })).Split(ClientAPI.COLUMN_DELIMITER.ToCharArray())
我希望结果是长度为2的数组,而是添加两个新的空字符串。
为什么会发生这种情况,如何在Join方法中避免它。 (我无法控制斯普利特)。
编辑
为什么会发生[...]?
String.Split Method (Char[])的文档告诉我们:
分隔符的每个元素定义一个单独的分隔符。如果两个分隔符相邻,或者在此实例的开头或结尾处找到分隔符,则返回数组中的相应元素包含空
这就是为什么你的结果数组中有空字符串的原因(不是因为你在注释中写的Join方法)。
编辑:在这个例子中,Split方法返回你的“输入”数组:
string.Join("~|~", new string[] { string.Empty, "2" }).Split(new string[] { "~|~" }, StringSplitOptions.None)
编辑-2:试试这个:
string.Join(ClientAPI.COLUMN_DELIMITER, new string[] { string.Empty, "2" }).Split(ClientAPI.COLUMN_DELIMITER, StringSplitOptions.None);
你的代码的问题是你给String.Split
方法一个字符数组。现在它认为你想要将原始字符串除以任何给定字符,在你的情况下为'〜'和'|'。
你的测试字符串是“〜| ~1”,所以他找到了三个分隔符:'〜','|'和'〜'再次。三个分隔符意味着四个字符串,因此你的三个空字符串。
你真正打算做的是用“〜|〜”作为一个完整的字符串,你可以通过调用来完成:
joined_input.Split(new string[] { ClientAPI.COLUMN_DELIMITER }, StringSplitOptions.None)
(没有.ToCharArray)
如果您不想接收空条目,也可以使用StringSplitOptions.RemoveEmptyEntries
。
只需使用StringSplitOptions.RemoveEmptyEntries
string.Join(new string(ClientAPI.COLUMN_DELIMITER.ToCharArray()), (new string[] { "1", "2" }))
.Split(ClientAPI.COLUMN_DELIMITER.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
编辑
无法返回原始空字符串。因为,你不知道哪一个是原创的。也许你可以在用“pattern”分割它之前替换空字符串,然后在恢复它们时用空字符串替换它们。
string pattern = "emptystringpattern";
string seperator = "||";
string[] input = new string[] { string.Empty,"1" };
for (int i = 0; i < input.Length; i++)
{
if (input[i] == string.Empty)
{
input[i] = pattern;
}
}
string joinedInput = string.Join(seperator, input);
var splits = joinedInput.Split(seperator.ToCharArray(),StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < splits.Length; i++)
{
if (splits[i] == pattern)
{
splits[i] = string.Empty;
}
}
此外,pattern
不应包含分隔符。
另一个选择是你可以在拆分之前得到空字符串的数量,在拆分过程之后,你可以根据计数再次添加数组。