当内容为\ 0 \ 0 \ 0 \ 0时,如何确定空字符串

时间:2011-04-15 13:23:07

标签: c# .net string c#-4.0

我有一个byte[4]的SizeOfData变量,它返回:

byte[0] == 0
byte[1] == 0
byte[2] == 0
byte[3] == 0

当我Encoding.ASCII.GetString(SizeOfData)时,字符串变量的长度为4而String.IsNullOrEmpty()返回false但是当我在Visual Studio中查看字符串时,其中没有任何内容。

如何确定它是否包含所有\ 0 \ 0 \ 0 \ 0然后执行X else Y?

4 个答案:

答案 0 :(得分:4)

一点点linq魔法

if (bytes.All(b => b == 0))

或稍好一点

if (bytes.Any(b => b != 0))

答案 1 :(得分:2)

  

当我在Visual Studio中查看字符串时,其中没有任何内容

你的意思是,我假设,当你将鼠标悬停在调试器中的字符串上(或添加一个手表,或检查本地,或以其他方式查看字符串的可视化表示)时,它似乎是空。这是因为\0和其他一些字符一样,是一个不可打印的字符。这些字符在那里,但它们不会产生视觉效果。

如果你想确定字节数组是否只有零,那很简单:

(请注意,上面的数组名称无效,因此我将其称为data

if(data.Add(b => b == 0))
{
    // is only null characters
}

然而,似乎你想要一些更强大的东西,以及可以在字符串上工作的东西。您可以使用简单的RegEx替换不可打印的Unicode字符范围(原始字符串,如ASCII,我知道,但一旦解析它,它内部存储为UTF-16):

yourString = Regex.Replace(yourString, "[\x00-\x1F]", "");

此时,string.IsNullOrEmpty(yourString)应返回true

答案 2 :(得分:1)

在转换为字符串之前,你可以:

bool isNulls = SizeOfData.All(x => x == 0);

答案 3 :(得分:0)

如果你可以提前处理它,你可以检查字节数组:

if(SizeOfData.Any(b => b != 0))
    // do something
else
    // do something else