在C#中检查字符串是否为空或全为空格

56

如何轻松检查字符串是否为空或只包含未确定数量的空格?

6个回答

80

1
我相信在新版本中,它是 string.IsNullOrEmpty(YourString) - sylverfyre
7
不行,它们是两种不同的方法并且有着不同的作用。请看:IsNullOrEmptyIsNullOrWhiteSpace - Merlyn Morgan-Graham
24
如果字符串为空,这个答案是不正确的,因为它会返回 true。 - Simon Bergot
4
@Simon: 如果那些认为这种差异很重要的人无法从方法名称中了解到这一点,那么我可能无法帮助他们。 - Merlyn Morgan-Graham
2
并且 完成。 ;^D OP可能想要你提供的内容(我们可能永远不知道...),但是从字面上理解,您的答案允许 null\t\r\n,这些都不是空格。 /耸肩 虽然这基本上是Shimmy的副本,但添加了测试null的能力,而扩展方法无法做到。 - ruffin
显示剩余2条评论

54
如果您已知道该字符串不为空,且只是想确保它不是空白字符串,请使用以下内容:
public static bool IsEmptyOrWhiteSpace(this string value) =>
  value.All(char.IsWhiteSpace);

9
如果需要检查是否为空并拒绝它,可以使用空引用条件调用和空合并运算符:value?.All(char.IsWhiteSpace) ?? false — 或者您可以使用不那么花哨的短路求值:value != null && value.All(char.IsWhiteSpace) - Palec

1
如果您确实需要知道“字符串是空白还是充满了未确定数量的空格”,请像@Sonia_yt建议的那样使用LINQ,但使用All()来确保一旦找到非空格字符就能有效地短路退出。 (这与Shimmy的方法大致相同,但仅回答了OP按照写作要求检查空格,而不是任何和所有空格-\t\n\r等等
/// <summary>
/// Ensure that the string is either the empty string `""` or contains
/// *ONLY SPACES* without any other character OR whitespace type.
/// </summary>
/// <param name="str">The string to check.</param>
/// <returns>`true` if string is empty or only made up of spaces. Otherwise `false`.</returns>
public static bool IsEmptyOrAllSpaces(this string str)
{
    return null != str && str.All(c => c.Equals(' '));
}

并在控制台应用程序中测试它...

Console.WriteLine("    ".IsEmptyOrAllSpaces());      // true
Console.WriteLine("".IsEmptyOrAllSpaces());          // true
Console.WriteLine("  BOO  ".IsEmptyOrAllSpaces());   // false

string testMe = null;
Console.WriteLine(testMe.IsEmptyOrAllSpaces());      // false

“但是你不能在空值上调用扩展方法” 你确定吗?你试过了吗?我大约80%的确信你可以这样做,只要在访问之前进行空值检查就可以了。毕竟,它只是静态方法的语法糖。 - Merlyn Morgan-Graham
1
!enumerable.Any(x => !predicate(x)) = enumerable.All(x => predicate(x)) 只是一种复杂的思维方式。 - Palec
@MerlynMorgan-Graham 你说得很对。我习惯于 string testMe = null; testMe.IndexOf("spam"); 并得到 An unhandled exception of type 'System.NullReferenceException' occurred,但这是 IndexOf 的“错”,而不是字符串为 null 的“错”。这证明了盲目模仿和大象口哨的错误。 “嘿,像在空字符串上调用 IndexOf 这样的字符串函数会出错。最好不要在空字符串上使用扩展方法。[在非空字符串上使用扩展方法永远不会出错。] 看到了吗?!” (◔_◔) - ruffin
@Palec 没错,Shimmy使用 All 更好,但他的答案也犯了和Merlyn一样的“错误”...空格字符集>空格字符集。;^) 我会编辑使用 All。双重否定在我写它时看起来很奇怪,我只是添加了一个注释而没有弄清楚正确的方法...失败。只是想快速展示检查 null 不是一个巨大的负担,Merlyn似乎认为它是。/耸肩 感谢你的努力。 - ruffin

1
if(string.IsNullOrEmpty(myStringValue.Trim()))

使用trim()函数,这样空白字符串就会变为空。这样你只需要使用string.IsNullOrEmpty来检查null、空白和空字符串。

0
private bool IsNullOrEmptyOrAllSpaces(string str)
{
    if(str == null || str.Length == 0)
    {
        return true;
    }

    for (int i = 0; i < str.Length; i++)
    {
        if (!Char.IsWhiteSpace(str[i])) return false;
    }

    return true;
}

-1

尝试使用 LinQ 解决?

if(from c in yourString where c != ' ' select c).Count() != 0)

如果字符串不全为空格,则返回 true。


1
过于啰嗦且性能不佳,毫无用处。即使在看到非空格字符后,它仍会迭代整个字符串。Enumerable.All<TSource> 采用短路求值,详见 .NET reference source - Palec

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