假设我有一个字符串string abc = "ROOT\abcd"
。我想得到子串“abcd”。
使用abc.substring(4)
,我只得到“bcd”作为回报。似乎“a”无法识别,因为“\ a”是C#中的特殊字符。如何获取“abcd”的整个子字符串?
答案 0 :(得分:6)
如果你想让你的字符串包含一个反斜杠,你需要使用反斜杠转义它,或者在字符串前加一个@ -sign:
string abc = @"ROOT\abcd";
string abc = "ROOT\\abcd";
编辑:如果您使用
创建了一个字符串string a = "\a";
然后将其存储在您的数据库中,字符串和数据库都不会在该位置包含字母“a”。相反,它将包含一个特殊字符,在某些终端上会发出蜂鸣声或眨眼,但在大多数现代系统中,它只是不可见的。如果是这种情况而不是您想要的数据库,则需要以正确的方式再次存储数据。我建议你打印你希望包含反斜杠的字符串,看看它们是否确实如此。您也可以尝试select
直接从sql server管理工作室包含反斜杠的字段(假设您使用的是sql server)并检查它们是否确实存在。
答案 1 :(得分:3)
根据您的示例,您无法。 \a
是一个escape sequence字符作为铃声(警报)。
这意味着,您的字符串实际上没有任何abcd
字符串。您的字符串包含ROOT
,\a
和bcd
字符串。
如果您可以将常规字符串文字更改为verbatim string literal,则字符串可以具有此功能。
string abc = @"ROOT\abcd";
abc.Substring(5) // returns abcd
或将你的/
字符加倍;
string abc = "ROOT\\abcd";
abc.Substring(5) // returns abcd
答案 2 :(得分:0)
请在字符串文字的前面添加'@'。 另外,你需要使用Substring(5)来获得'abcd'。 4为您提供'\'
答案 3 :(得分:0)
这应该有效:
string abc = @"ROOT\abcd";
string s = abc.Substring(5);
编辑: “\ a”是一个转义序列。在字符串前使用“@”来获取逐字字面值