![](/img/trans.png)
[英]Java equivalent of c# String.IsNullOrEmpty() and String.IsNullOrWhiteSpace()
[英]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.