.Net: Пустая строка не является пробелом? - PullRequest
2 голосов
/ 07 апреля 2009

Я всегда использую String.IsNullOrEmpty для проверки пустой строки. Недавно мне стало известно, что "" считается пустой строкой. Например,

 Dim test As String = " "
    If String.IsNullOrEmpty(test) Then
        MessageBox.Show("Empty String")
    Else
        MessageBox.Show("Not Emtpy String")
    End If

Появится «Не пустая строка». Так как же мы проверяем наличие "" или "" в строке?

edit: я не знал, что "" считается символом.

Ответы [ 13 ]

13 голосов
/ 07 апреля 2009

Попробуйте этот метод, чтобы проверить наличие пустых строк. Он отличается от версий Trim () тем, что не выделяет новую строку. Он также использует более расширенное понятие пробела.

Public Function IsNullOrBlank(ByVal str as String) As Boolean
  if String.IsNullOrEmpty(str) Then
    Return True
  End IF
  For Each c In str
    IF Not Char.IsWhiteSpace(c) Then
      Return False
    End If
  Next
  Return True
End Function
7 голосов
/ 17 августа 2010

String.IsNullOrWhiteSpace находится в BCL в .NET 4

6 голосов
/ 07 апреля 2009

"" - это значение ASCII 32, оно ничем не отличается от любого другого символа ASCII, за исключением того, что оно выглядит пустым.

3 голосов
/ 07 апреля 2009

Проблема в том, что вам нужно обрезать строку, однако, если вы вызовете trim () для пустой строки, вы получите ошибку.

string.IsNullOrEmpty(s.Trim())

Это приведет к ошибке.

Вам нужно будет сделать что-то вроде

if (Not string.IsNullOrEmpty(s) AndAlso s.Trim()!=string.Empty)

Это проверит, что строка не пуста или не пуста, если есть что-то, что она обрежет, а затем проверит, что она не пуста.

Редактировать

Спасибо Слау за помощь в синтаксисе VB. Я C # парень должен освежить в синтаксисе VB

1 голос
/ 07 апреля 2009
public static bool IsNullOrWhite(string s)
{
  if (String.IsNullOrEmpty(s))
    return true;

  for (int i = 0; i < s.Length; i++)
    if (!Char.IsWhiteSpace(s, i))
      return false;

  return true;
}
1 голос
/ 07 апреля 2009

В VB.NET вам нужно использовать такой тест:

If String.IsNullOrEmpty(test) OrElse String.IsNullOrEmpty(test.Trim()) Then

OrElse предотвращает возникновение NullException на test.Trim()

0 голосов
/ 07 апреля 2009
If test Is Nothing OrElse test.Trim().Length = 0 Then ...
0 голосов
/ 07 апреля 2009
If String.IsNullOrEmpty(str) OrElse str.Trim().Length = 0 Then
  ' ..
End If

Следующее может не сработать, если str имеет значение null, так как вызов метода с нулевым значением приведет к исключению. If String.IsNullOrEmpty (str.Trim ()) тогда 'иногда исключение ... End If

0 голосов
/ 07 апреля 2009

Если вам действительно нужно обрабатывать строки, содержащие только пробельные символы, так же, как пустые или нулевые строки, то вы можете использовать такой метод расширения, как этот (извините, он в C #):

namespace ExtensionMethods
{
    public static class StringExtensions
    {
        public static bool IsNullOrEmptyOrWhitespace(this string str)
        {
            if (string.IsNullOrEmpty(str)) return true;
            return (str.Trim().Length == 0);
        }
    }
}

Это позволяет вам написать:

using ExtensionMethods;

string s1 = "  ";
string s2 = "some string";

s1.IsNullOrEmptyOrWhitespace(); //-> returns true
s2.IsNullOrEmptyOrWhitespace(); //-> returns false
0 голосов
/ 07 апреля 2009

Вы можете добавить метод расширения, такой как обсуждался здесь , и сохранить то же удобство использования, которое вы ранее имели с IsNullOrEmpty().

...