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

时间:2017-12-19 13:40:48

标签: c# string dotnetnuke

我有以下

<context:component-scan base-package="com.f.controller"/>

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

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

string join and split

修改

enter image description here

3 个答案:

答案 0 :(得分:4)

  

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

String.Split Method (Char[])的文档告诉我们:

  

分隔符的每个元素都定义了一个单独的分隔符。如果两个分隔符相邻,或者在此实例的开头或结尾处找到分隔符,则返回数组中的相应元素包含空

这就是为什么你的结果数组中有空字符串(不是因为你在评论中写的连接方法)。

编辑: 在这个例子中,Split方法返回你的“输入”数组:

string.Join("~|~", new string[] { string.Empty, "2" }).Split(new string[] { "~|~" }, StringSplitOptions.None)

EDIT-2: 试试这个:

string.Join(ClientAPI.COLUMN_DELIMITER, new string[] { string.Empty, "2" }).Split(ClientAPI.COLUMN_DELIMITER, StringSplitOptions.None);

答案 1 :(得分:4)

您的代码的问题在于您为String.Split方法提供了一个字符数组。现在它认为你想要将原始字符串除以任何给定的字符,在你的情况下&#39;〜&#39;和&#39; |&#39;。

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

你真正想做的事情是&#34;〜|〜&#34;作为一个完整的字符串,你可以通过调用:

来完成

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

(没有.ToCharArray)

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

答案 2 :(得分:0)

只需使用StringSplitOptions.RemoveEmptyEntries

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

修改

无法返回原始空字符串。因为,你不知道哪一个是原创的。也许你可以用一个&#34;模式&#34;来替换空字符串。然后在恢复它们时用空字符串替换它们。

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

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