如何在C#字符串中使用\反斜杠

5

我想在字符串中使用反斜杠\,例如

string str="abc\xyz";

但是这给我报错了。

我也尝试过

string str="abc\\xyz";

但是它仍然没有工作。 有人可以帮助我吗?

我同意所有答案,但是第二次尝试的结果是什么(应该可以工作),你期望得到什么? - Timores
有效地重复 - https://dev59.com/VXNA5IYBdhLWcg3wL6yx - ChrisF
如果你还有问题,那肯定会有解决办法 - 发布一小段代码片段吧,也许问题不在那一行。 - itsmatt
3
第二个例子不应该是 string str = "abc\\xyz" 吗?也就是说只需要 两个 反斜杠即可。使用三个会导致"未识别的转义序列"错误。 - ChrisF
1
@Timores - 第二个结果不应该工作;有三个反斜杠,导致 \ 和 \xyz - 因为 \xyz 不是有效的十六进制,编译器将拒绝它。 - Richard Szalay
显示剩余3条评论
8个回答

16
你可以通过转义字符来实现,像这样:

You can either escape the character, like so:

string str="abc\\xyz";

或者使用如下的原义字符串字面量:

string str=@"abc\xyz";

所以你的第二个例子应该可以工作。

更多信息请参见这里


1
顺便提一下,后者被称为“原始字符串字面量”。 - Richard Szalay
1
在一个9年前的回答上获得了一票赞。我喜欢这个地方。 - Dave Van den Eynde

5
string str="abc\\xyz";

通常情况下,这应该可以工作。另一种选择是:
string str = @"abc\xyz";

5

那么后者("abc\\xyz")在字符串中肯定会出现反斜杠 - 或者你可以使用一个原始字符串字面量:

string str = @"abc\xyz";

请注意,如果您使用调试器查看字符串,它通常(总是?)会为您“转义”它们,因此您会看到"abc\\xyz"。这可能会导致相当多的混乱。要么逐个查看字符,要么将字符串打印到控制台。
你没有说明它“不起作用”的方式-你能否提供更多细节?如果只是调试器输出的问题,那么上面的内容可能是您要找的全部内容-但如果不是,您应该告诉我们您看到了什么,与您期望看到的有什么不同。
请参阅我的有关字符串的文章,了解有关字符串、转义、调试器等方面的更多信息。

是的。在调试时,当我使用@"abc\xyz"时,我看到了abc\xyz。 - Brigadier Jigar
由于这个问题,我无法在我的代码中继续进行任何操作。 - Brigadier Jigar
1
@Brigadier:但这是正确的数据。为什么调试器显示正确的数据,但作为逐字字符串文字使你“无法在[你的]代码中进一步做任何事情”?实际上有什么阻止你继续下去?除了以逐字字符串文字格式看到字符串之外,您还遇到了什么意外结果? - Jon Skeet
我正在从abc\xyz中提取\后面的子字符串,即我想要xyz。 但是通过编写字符串str=@"abc\xyz",我得到的是\xyz。 - Brigadier Jigar
1
@Brigadier:那么你提取子字符串的代码有问题。我怀疑你漏掉了一个“+1”。 - Jon Skeet
字符串结果 = str.Substring(str.LastIndexOf("") + 1); // 以防有人想知道... - anon271334

2
public class Program
{
    static void Main(string[] args)
    {
        string str = "abc\\xyz";
        Console.WriteLine(str);
    }
}

这个很好用。它打印出abc\xyz


2
你可以像这样做
string str = @"abc\xyz";

2
string str = @"abc\xyz";

1
你可以这样做:
string str = @"abc\xyz";

这说明斜杠是有意义的,而不是转义字符。


1

您需要在字符串前加上 '@' 符号,以防止编译器将其视为转义序列。因此,string str = @"abc\xyz"; 应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接