通过ClientAPI.COLUMN_DELIMITER连接字符串然后通过相同的分隔符拆分添加两个新元素

问题描述 投票:0回答:3

我有以下内容

string.Join(ClientAPI.COLUMN_DELIMITER),(new string[] {"1", "2" })).Split(ClientAPI.COLUMN_DELIMITER.ToCharArray())

我希望结果是长度为2的数组,而是添加两个新的空字符串。

为什么会发生这种情况,如何在Join方法中避免它。 (我无法控制斯普利特)。

string join and split

编辑

enter image description here

c# string dotnetnuke
3个回答
4
投票

为什么会发生[...]?

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);

4
投票

你的代码的问题是你给String.Split方法一个字符数组。现在它认为你想要将原始字符串除以任何给定字符,在你的情况下为'〜'和'|'。

你的测试字符串是“〜| ~1”,所以他找到了三个分隔符:'〜','|'和'〜'再次。三个分隔符意味着四个字符串,因此你的三个空字符串。

你真正打算做的是用“〜|〜”作为一个完整的字符串,你可以通过调用来完成:

joined_input.Split(new string[] { ClientAPI.COLUMN_DELIMITER }, StringSplitOptions.None)

(没有.ToCharArray)

如果您不想接收空条目,也可以使用StringSplitOptions.RemoveEmptyEntries


0
投票

只需使用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不应包含分隔符。

另一个选择是你可以在拆分之前得到空字符串的数量,在拆分过程之后,你可以根据计数再次添加数组。

© www.soinside.com 2019 - 2024. All rights reserved.