5

我有以下表达式:

"<p>What ?</p>\n<pre>Starting Mini</pre>"

当我执行如下拆分时:

   var split = content
      .Split(new[] { "<pre>", "</pre>" }, StringSplitOptions.None);

然后它给了我三个条目:

"<p>What ?</p>\n"
"Starting Mini"
""

为什么它给出一个空行作为第三个条目,我该如何避免这种情况?

4

8 回答 8

5

“为什么”很简单:输入(如果您不删除空条目)将始终在分隔符的任何出现处“拆分”,因此如果分隔符n在字符串中出现次数,则数组会很n+1长。特别是,这基本上让您知道它们在原始字符串中出现的位置(尽管使用多个分隔符时,它不会让您知道哪个出现在哪里)。

例如,一个简单的例子(没有任何转义的csv等):

string[] arr = input.Split(','); // even if something like "a,b,c,d,"
// which allows...
int numberOfCommas = arr.Length - 1;
string original = string.Join(",", arr);

如前所述,修复方法是使用RemoveEmptyEntries.

于 2012-10-08T07:20:09.907 回答
2

改为StringSplitOptions.RemoveEmptyEntries删除列表中的空字符串

 var split = content
  .Split(new[] { "<pre>", "</pre>" }, StringSplitOptions.RemoveEmptyEntries);
于 2012-10-08T07:13:40.490 回答
2

您会得到 Microsoft 指定的这种行为: “相邻分隔符产生一个包含空字符串 ("") 的数组元素。” 所以因为你有最后一个 pre 你得到最后一个空数组元素

于 2012-10-08T07:43:57.447 回答
1

你得到这种行为的原因</pre>是你的分隔符恰好存在于字符串的末尾

您可能会看到:string.Split - MSDN

...在此实例的开头或结尾找到分隔符,对应的数组元素包含 Empty

为了克服这个:

使用StringSplitOptions.RemoveEmptyEntries代替StringSplitOptions.None

StringSplitOptions.RemoveEmptyEntries - MSDN

返回值不包括包含空字符串的数组元素

 var split = content
       .Split(new[] { "<pre>", "</pre>" }, StringSplitOptions.RemoveEmptyEntries);
于 2012-10-08T07:14:25.793 回答
1

Mailou,而不是给'StringSplitOptions.None'尝试'StringSplitOptions.RemoveEmptyEntries'。它删除了空行。

于 2012-10-08T07:17:26.200 回答
0

您还需要指定

StringSplitOptions.RemoveEmptyEntries enumerator.
于 2012-10-08T07:14:23.257 回答
0

使用StringSplitOptions.RemoveEmptyEntries拆分字符串 [] 值不包含任何空字符串

var split = content
  .Split(new[] { "<pre>", "</pre>" }, StringSplitOptions.RemoveEmptyEntries);

参考:StringSplitOptions 枚举

于 2012-10-08T07:16:18.993 回答
0

你得到空行是由于

</pre>

您正在指示split函数拆分为<pre>and</pre>

结果是<pre>你得到

<p>What ?</p>\n
Starting Mini</pre>

下一个结果</pre>

<p>What ?</p>\n
Starting Mini
...
于 2012-10-08T07:27:30.707 回答