C#string.IsNullOrWhiteSpace(";\t";)==true
我有一行代码C#string.IsNullOrWhiteSpace(";\t";)==true,c#,C#,我有一行代码 var delimiter = string.IsNullOrWhiteSpace(foundDelimiter) ? "," : foundDelimiter; 当foundDelimiter为“\t”时,string.IsNullOrWhiteSpace返回true 为什么??解决这个问题的合适方法是什么 \t是制表符,即空白。在C#中,您可以执行以下任一操作以获得选项卡: var tab1 = "\t"; var tab2 = " "; var areEqual =
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所指出的,当答案呈现时,将制表符转换为空格也是如此。如果你在IDE中,你只需点击quote,tab,quote
就解决方法而言,我建议您只需在条件语句中添加选项卡检查
var delimiter = string.IsNullOrWhiteSpace(foundDelimiter) && foundDelimiter != "\t" ? "," : foundDelimiter;
欢迎使用Unicode
你以为会发生什么?HT(水平制表符)几十年来一直是空白字符。空白字符的“经典”C语言定义由US-ASCII字符组成:
:空格(0x20,SP
)“”
:水平选项卡(0x09,HT
)'\t'
:换行符(0x0A,LF
)“\n”
:垂直选项卡(0x0B,VT
)'\v'
:垂直选项卡(0x0C,FF
)“\f”
:回车(0x0C,CR
)“\r”
- Unicode类别空格分隔符的成员:
(U+0020)空格
(U+1680)OGHAM空格标记
(U+180E)蒙古语元音分隔符
(U+2000)EN-QUAD
(U+2001)EM-QUAD
(U+2002)EN SPACE
(U+2003)EM空间
(U+2004)每EM空间三个
(U+2005)每EM空间四个
(U+2006)6个/EM空间
(U+2007)图形空间
(U+2008)标点符号空间
(U+2009)精简空间
(U+200A)头发空间
(U+202F)狭窄的不间断空间
(U+205F)中等数学空间
(U+3000)表意空间
- Unicode类别LineSeparator的成员,它仅由
(U+2028)行分隔符
- Unicode类别段落分隔符的成员,该分隔符仅由
(U+2029)段落分隔符
- 这些基本拉丁/C0控件/US-ASCII字符:
(U+0009)字符列表
(U+000A)换行
(U+000B)行列表
(U+000C)表单提要
(U+000D)回车
- 这些C1控件和拉丁语-1补充字符
(U+0085)下一行
(U+00A0)无中断空间
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 ;
}
另外,仅供参考:正如viggity所说,该函数是正确的。您可以创建一个if,使其按您想要的方式工作。那么就Visual Studio而言,
“\t”
和“
是否完全等效?@Sabe和Silvermind将其选项卡转换为四个空格。在编辑模式下,它是一个选项卡。但是,是的,在编程语言中,制表符通常在字符串中表示为\t
,这样您就可以识别它,但在C语言中,制表符也可以按字面意思使用;这两个字符是等效的。@Sabe No.制表符是一个字符。它可能表示的空间数完全取决于上下文。如果你不是在寻找空白,请使用String.IsNullOrEmpty(…)
我不明白为什么这被否决了,这是一个诚实的错误。你为什么要解决它?很明显,您要替换空白,制表符是空白字符,就像普通的空格字符一样。请参见空格、制表符、换行符、回车符、换行符、垂直制表符和换行符都称为“空白字符”
制表符是它自己的字符,它只是一个空白字符。它的显示方式完全取决于上下文。按照我的口味,unicode在这里不太实用。我当前的用例是尝试使用Unicode类别来区分水平空间和垂直空间。但是没有。。。我将不得不创建一个查找表,而不是使用System.Globalization.CharUnicodeInfo.getunicodecegory(c)
。干得好,官僚们!;)
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 ;
}