我有以下表达式:
"<p>What ?</p>\n<pre>Starting Mini</pre>"
当我执行如下拆分时:
var split = content
.Split(new[] { "<pre>", "</pre>" }, StringSplitOptions.None);
然后它给了我三个条目:
"<p>What ?</p>\n"
"Starting Mini"
""
为什么它给出一个空行作为第三个条目,我该如何避免这种情况?
我有以下表达式:
"<p>What ?</p>\n<pre>Starting Mini</pre>"
当我执行如下拆分时:
var split = content
.Split(new[] { "<pre>", "</pre>" }, StringSplitOptions.None);
然后它给了我三个条目:
"<p>What ?</p>\n"
"Starting Mini"
""
为什么它给出一个空行作为第三个条目,我该如何避免这种情况?
“为什么”很简单:输入(如果您不删除空条目)将始终在分隔符的任何出现处“拆分”,因此如果分隔符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
.
改为StringSplitOptions.RemoveEmptyEntries
删除列表中的空字符串
var split = content
.Split(new[] { "<pre>", "</pre>" }, StringSplitOptions.RemoveEmptyEntries);
您会得到 Microsoft 指定的这种行为: “相邻分隔符产生一个包含空字符串 ("") 的数组元素。” 所以因为你有最后一个 pre 你得到最后一个空数组元素
你得到这种行为的原因</pre>
是你的分隔符恰好存在于字符串的末尾。
您可能会看到:string.Split - MSDN
...在此实例的开头或结尾找到分隔符,对应的数组元素包含 Empty
为了克服这个:
使用StringSplitOptions.RemoveEmptyEntries
代替StringSplitOptions.None
StringSplitOptions.RemoveEmptyEntries - MSDN
返回值不包括包含空字符串的数组元素
var split = content
.Split(new[] { "<pre>", "</pre>" }, StringSplitOptions.RemoveEmptyEntries);
Mailou,而不是给'StringSplitOptions.None'尝试'StringSplitOptions.RemoveEmptyEntries'。它删除了空行。
您还需要指定
StringSplitOptions.RemoveEmptyEntries enumerator.
使用StringSplitOptions.RemoveEmptyEntries拆分字符串 [] 值不包含任何空字符串
var split = content
.Split(new[] { "<pre>", "</pre>" }, StringSplitOptions.RemoveEmptyEntries);
你得到空行是由于
</pre>
您正在指示split
函数拆分为<pre>
and</pre>
结果是<pre>
你得到
<p>What ?</p>\n
Starting Mini</pre>
下一个结果</pre>
是
<p>What ?</p>\n
Starting Mini
...