为什么C#split给我一个以空行结尾的数组?

时间:2012-10-08 07:12:19

标签: c#

我有以下表达式:

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

当我按如下方式执行拆分时:

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

然后它给了我三个条目:

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

为什么它将空行作为第三个条目,我该如何避免这个?

8 个答案:

答案 0 :(得分:4)

“为什么”只是:输入(如果你不删除空条目)将始终在任何分隔符出现时“拆分”,所以如果分隔符出现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

答案 1 :(得分:2)

使用StringSplitOptions.RemoveEmptyEntries代替删除列表中的空字符串

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

答案 2 :(得分:2)

您会收到Microsoft指定的此行为: "Adjacent delimiters yield an array element that contains an empty string ("")." 所以,既然你有最后一个预先获得最后一个空数组元素

答案 3 :(得分:1)

原因您获得此行为的原因是您的其中一个分隔符</pre>碰巧存在于字符串的末尾

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

  

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

要克服这个问题:

使用StringSplitOptions.RemoveEmptyEntries代替StringSplitOptions.None

StringSplitOptions.RemoveEmptyEntries - MSDN

  

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

您还需要指定

StringSplitOptions.RemoveEmptyEntries enumerator.

答案 6 :(得分:0)

使用 StringSplitOptions.RemoveEmptyEntries

,拆分字符串[]值不包含任何空字符串
var split = content
  .Split(new[] { "<pre>", "</pre>" }, StringSplitOptions.RemoveEmptyEntries);

参考:StringSplitOptions Enumeration

答案 7 :(得分:0)

由于

,您将获得空行
  

</pre>

您正在指示split功能按<pre></pre>进行分割

结果<pre>你得到了

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

下一个结果是</pre>

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