2009-04-07 100 views
2

我一直使用String.IsNullOrEmpty來檢查一個空字符串。最近我注意到一個「」並不是一個空字符串。例如,.Net:空字符串不是空白字符?

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

它將顯示「非空字符串」。那麼我們如何檢查字符串中的「」或「」?

編輯:我不知道「」算作人物。

回答

12

試試用這種方法檢查空白字符串。它不同於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 
-2

嘗試

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

希望有所幫助。

+0

將拋出修剪異常()與空 – andleer 2009-04-07 15:21:57

+0

是的,我認爲這是上鍊鏈接:) – 2009-04-08 08:33:14

3

問題是你需要修剪字符串,但是如果你在一個空字符串上調用trim(),你會得到一個錯誤。

string.IsNullOrEmpty(s.Trim()) 

這會報錯。

你需要做這樣的事情

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

這將驗證字符串不爲空或空,如果有東西會修剪,然後驗證它不是空的。

編輯

感謝Slough幫助我使用VB語法。我是一個C#人需要刷上vb的語法

+1

使用ANDALSO而不是AND – 2009-04-07 15:29:10

0

也許你只是想在檢查它之前修剪字符串(空格)?

Dim test As String = " " 
If test.Trim().Length = 0 Then // Best option as long as string is guaranteed not to be null. 
// If test = Nothing OrElse test.Trim().Length = 0 Then // If string can be null. 
    MessageBox.Show("Empty String") 
Else 
    MessageBox.Show("Not Emtpy String") 
End If 
+0

此外,請注意,您可以測試`test.Trim()== string.Empty`。這對你個人而言是可讀性的問題(我不相信有任何不同的表現,因爲這兩項檢查可能會得到優化)。 – Noldorin 2009-04-07 15:15:51

+1

除了測試是空的...對不起在VB.NET中它會崩潰。 – 2009-04-07 15:23:10

+0

@Petar:閱讀評論專欄。 :) – Noldorin 2009-04-07 15:42:07

6

「」是一個ASCII 32值,它與任何其他ASCII字符沒有區別,只是它看起來是空白的。

1

在VB.NET你需要使用這樣一個測試:

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

OrElse防止NullException從上test.Trim()

0

如出現所提到的,調用TRIM( )如果字符串爲null,則會拋出NullReferenceException。我有時使用Regex.IsMatch(test, "^ +$")(希望我的參數順序是正確的)來測試一個或多個空間。 ^和$確保你匹配整個字符串。

-1

您可以添加一個擴展方法,例如討論的here,並保持您以前與IsNullOrEmpty()一樣的易用性。

1
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; 
} 
0

如果你真的需要治療只含有空格字符一樣空或空字符串,那麼你可以使用擴展方法像這樣的(不好意思,這是在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 
-1
If String.IsNullOrEmpty(str) OrElse str.Trim().Length = 0 Then 
    ' .. 
End If 

如果str爲null作爲調用下面可能無法正常工作的某個時候方法null將導致異常。 如果String.IsNullOrEmpty(str.Trim()),然後「例外有時 ... 結束如果

0
If test Is Nothing OrElse test.Trim().Length = 0 Then ...