拆分字符串在返回的数组末尾返回一个额外的字符串

Jiv*_*ari 0 c# split

我正在尝试将字符串;用作分隔符。

我的输出很奇怪,为什么返回数组的末尾有一个空字符串?

string emails = "bitebari@gmail.com;abcd@gmail.com;";
string[] splittedEmails = emails.TrimEnd().Split(';');

foreach (var email in splittedEmails)
{
    Console.WriteLine("Value is :" + email);
}
Run Code Online (Sandbox Code Playgroud)

控制台输出如下所示:

值为:bitebari@gmail.com

值为:abcd@gmail.com

价值是:

Twe*_*nty 6

string.Split默认情况下,该方法不会删除空条目,无论如何,您可以通过为它提供StringSplitOptions. 尝试将您的方法与StringSplitOptions.RemoveEmptyEntries参数一起使用。

string[] splittedEmails = emails.Split(';', StringSplitOptions.RemoveEmptyEntries);
Run Code Online (Sandbox Code Playgroud)

实际上,您应该尝试传递;给您的TrimEnd方法,否则它会截断空格。因此,您的字符串将保留;在末尾。这将导致以下结果:

string[] splittedEmails = emails.TrimEnd(';').Split(';');
Run Code Online (Sandbox Code Playgroud)

上述两种解决方案都有效,因为性能差异不应该那么高,所以确实是首选。

编辑

至少在 C# 中,这种行为被认为是“标准的”,让我引用MSDN来说明这一点。

此行为使表示表格数据的逗号分隔值 (CSV) 文件等格式变得更容易。连续的逗号代表一个空白列。

您可以传递可选的 StringSplitOptions.RemoveEmptyEntries 参数以排除返回数组中的任何空字符串。对于返回集合的更复杂处理,您可以使用 LINQ 来操作结果序列。

也没有任何特殊情况。