如何确定一个空字符串,当它的内容是

本文关键字:字符串 何确定 一个 | 更新日期: 2023-09-27 17:50:12

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

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?

如何确定一个空字符串,当它的内容是����

linq的一点点魔力

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

或稍好一点的

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

当我在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

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

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

如果您可以更早地处理它,您可以检查字节数组:

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