我有以下表达式:
"<p>What ?</p>\n<pre>Starting Mini</pre>"
当我按如下方式执行拆分时:
var split = content
.Split(new[] { "<pre>", "</pre>" }, StringSplitOptions.None);
然后它给了我三个条目:
"<p>What ?</p>\n"
"Starting Mini"
""
为什么它将空行作为第三个条目,我该如何避免这个?
答案 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);
答案 7 :(得分:0)
由于
,您将获得空行
</pre>
您正在指示split
功能按<pre>
和</pre>
进行分割
结果<pre>
你得到了
<p>What ?</p>\n
Starting Mini</pre>
下一个结果是</pre>
是
<p>What ?</p>\n
Starting Mini
...