在C#数组中去除null/空字符串值

36

我有一个程序,其中一个数组使用string.Split(char[] delimiter)来获取其数据。(使用 ';' 作为分隔符。)

然而,有些值是null。也就是说,字符串中存在没有数据的部分,导致数组中存在null值。

我该如何去掉这些null值?


你应该编辑你的问题,删除 null 并只声明空字符串。string.Split 不会返回 null 字符串,只会返回空字符串。 - Samuel
5个回答

112

试试这个:

yourString.Split(new string[] {";"}, StringSplitOptions.RemoveEmptyEntries);

7
无法编译。你需要将新的 char[]{';'} 作为第一个参数使用。 - Guffa
2
需要注意的一点是,这不会删除仅由空格组成的字符串。 - denver
代码运行结果与预期不符。例如:var a = "1" + "," + "" + "," + "2" + "," + " " + "," + "3" + "," + " " + "," + null + ","+"4"; . a.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); . Console.WriteLine(a.ToString()); 的输出结果应该是 1,,2, ,3, ,,4。 - PSR

2
您可以使用Where Linq扩展方法仅返回非空值。
string someString = "1;2;;3;";

IEnumerable<string> myResults = someString.Split(';').Where<string>(s => !string.IsNullOrEmpty(s));

你可以在Split和Where之间插入.Select(s => s.Trim()),这样只包含空格的字符串也会被删除。 - Tamas Czinege
1
注意:Split方法永远不会产生null值。 - Guffa
@TamasCzinege 你可以使用 string.IsNullOrWhiteSpaces 而不是 trim()。 - PSR

2
public static string[] nullLessArray(string[] src)
{
    Array.Sort(src);
    Array.Reverse(src);
    int index = Array.IndexOf(src, null);

    string[] outputArray = new string[index];

    for (int counter = 0; counter < index; counter++)
    {
       outputArray[counter] = src[counter];
    }

    return outputArray;
}

0
                words = poly[a].Split(charseparators, StringSplitOptions.RemoveEmptyEntries);

                foreach (string word in words)
                    {   
                        richTextBox1.Text += (d + 1)+ "  " + word.Trim(',')+ "\r\n";
                        d++;
                    }

charseparators 是一个空格


0

在拆分数据之前,您应该将多个相邻的分号替换为一个分号。

这将用一个分号替换两个分号:

datastr = datastr.replace(";;",";");

但是,如果你有超过两个分号在一起,正则表达式会更好。

datastr = Regex.Replace(datastr, "([;][;]+)", ";");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接