我有一系列名称与_
ex:string[] samples = ["Test_test","Test2_blah", "Test3_"]
连接在一起。
在我的代码中的某个时刻,我想尝试在_
之后验证值是否为空或空,如果是,请将其从数组中删除,如下所示:< / p>
string[] splitSample= samples[2].Split(new char[] { '_' }, 2);
if(!string.IsNullOrWhiteSpace(splitSample[1]))
我遇到的问题是splitSample[1]
是""
,当我检查字符串的长度时,它是1,而不是0但是在Visual Studio 2017中它显示空引号。有没有办法真正看到隐形或实际发生的价值?
答案 0 :(得分:3)
根据呈现的方式,某些Unicode字符在表示时可以是不可见的(即static void Main(string[] args)
{
string invisibleChar = "\u200C";
string[] samples = { "Test_test", "Test2_blah", "Test3_" + invisibleChar };
string[] splitSample = samples[2].Split(new char[] { '_' }, 2);
// Prints "Test3_" (or "Test3_?" if you use Console.Write).
Debug.Print(samples[2]);
Debug.Print(splitSample.Length.ToString()); // 2
if (!string.IsNullOrWhiteSpace(splitSample[1]))
{
Debug.Print(splitSample[1].Length.ToString()); // 1
// Prints "" (or "?" in Console).
Debug.Print(splitSample[1]);
var hex = string.Join("", splitSample[1].Select(c => ((int)c).ToString("X2")));
// Prints "200C"
Debug.Print(hex);
}
Console.ReadLine();
}
)(例如"\u200C"
,"\u2063"
和检查this answer了解更多信息。
现在,你的字符串有一个长度(> 0),你想知道它实际代表什么。有很多方法可以实现这一点,其中之一是将您的字符串转换为十六进制。以下是使用上述Unicode字符的示例:
!string.IsNullOrWhiteSpace
请注意,由于您使用的是set servname [lindex $argv 1]
set osusername [lindex $argv 2]
,因此可能会遗漏其他Unicode字符(例如"\u00A0"
),因为它们被视为空格。所以,你应该问自己是否也要检查这些。
希望有所帮助。