簡體   English   中英

C#string.IsNullOrWhiteSpace(“\\ t”)== true

[英]C# string.IsNullOrWhiteSpace(“\t”) == true

我有一行代碼

var delimiter = string.IsNullOrWhiteSpace(foundDelimiter) ? "," : foundDelimiter;

foundDelimiter"\\t" ,string.IsNullOrWhiteSpace返回true。

為什么? 什么是解決這個問題的合適方式?

\\t是制表符,即空格。 在C#中可以執行以下任一操作來獲取選項卡:

var tab1 = "\t";
var tab2 = "    ";

var areEqual = tab1 == tab2; //returns true

編輯:正如Magus所說,當答案被渲染時,SO正在將我的制表符轉換為空格。 如果你在IDE中,你只需點擊引號,標簽,引用。

就解決方法而言,我建議您只在條件中添加選項卡檢查。

var delimiter = string.IsNullOrWhiteSpace(foundDelimiter) && foundDelimiter != "\t" ? "," : foundDelimiter;

歡迎使用Unicode。

你期望會發生什么? HT(水平標簽)幾十年來一直是空白角色。 白色空格字符的“經典”C語言定義由US-ASCII字符組成:

  • SP :空格(0x20, ' '
  • HT :水平標簽(0x09, '\\t'
  • LF :換行(0x0A, '\\n'
  • VT :垂直標簽(0x0B, '\\v'
  • FF :垂直制表符(0x0C, '\\f'
  • CR :回車(0x0C, '\\r'

Unicode在它的方法中更為一致......它的白色空間字符的定義是這樣的:

  • Unicode類別SpaceSeparator的成員

    • SPACE (U + 0020)
    • OGHAM SPACE MARK (U + 1680)
    • MONGOLIAN VOWEL SEPARATOR (U + 180E)
    • EN QUAD (U + 2000)
    • EM QUAD (U + 2001)
    • EN SPACE (U + 2002)
    • EM SPACE (U + 2003)
    • THREE-PER-EM SPACE (U + 2004)
    • FOUR-PER-EM SPACE (U + 2005)
    • SIX-PER-EM SPACE (U + 2006)
    • FIGURE SPACE (U + 2007)
    • PUNCTUATION SPACE (U + 2008)
    • THIN SPACE (U + 2009)
    • HAIR SPACE (U + 200A)
    • NARROW NO-BREAK SPACE (U + 202F)
    • MEDIUM MATHEMATICAL SPACE (U + 205F)
    • IDEOGRAPHIC SPACE (U + 3000)
  • Unicode類別LineSeparator的成員,僅由

    • LINE SEPARATOR (U + 2028)
  • Unicode類別ParagraphSeparator的成員,僅由

    • PARAGRAPH SEPARATOR (U + 2029)
  • 這些Basic Latin / C0控件/ US-ASCII字符:

    • CHARACTER TABULATION (U + 0009)
    • LINE FEED (U + 000A)
    • LINE TABULATION (U + 000B)
    • FORM FEED (U + 000C)
    • CARRIAGE RETURN (U + 000D)
  • 這些C1控件和Latin-1補充字符

    • NEXT LINE (U + 0085)
    • NO-BREAK SPACE (U + 00A0)

如果您不喜歡這個定義,請沿着這些行滾動(插入您自己的字符集):

public static bool IsNullOrCLanguageWhitespace( this string s )
{
  bool value = ( s == null || rxWS.IsMatch(s) ) ;
  return value ;
}
private static Regex rxWS = new Regex( @"^[ \t\n\v\f\r]*$") ;

您可能還想添加char模擬:

public static bool IsCLanguageWhitespace( this char c )
{
  bool value ;
  switch ( c )
  {
  case ' '  : value = true  ; break ;
  case '\t' : value = true  ; break ;
  case '\n' : value = true  ; break ;
  case '\v' : value = true  ; break ;
  case '\f' : value = true  ; break ;
  case '\r' : value = true  ; break ;
  default   : value = false ; break ;
  }
  return  value ;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM