C#的Replace方法未按预期工作

3

我试图将双反斜杠替换为一个简单的反斜杠,但是它不起作用。下面是一张图片:

enter image description here

我仍然在想为什么会这样。我看到了像这样的帖子,对他们来说起作用了。 有什么建议吗?

更新

抱歉,我犯了一个错误,实际上只是一个反斜杠,只是我拼错了 替换代码如下:

string clear_patch = path.Replace(@"\\","\");

1
你的字符串中没有双反斜杠。点击放大镜,你就会看到。 - Daniel Hilgarth
抱歉,我犯了一个错误,实际上是单个反斜杠,只是我拼错了。 - user2195741
1
我建议你阅读有关“转义字符”以及在使用“@”符号时“字面量”的含义,这将极大地帮助你。 - MethodMan
你想要实现什么目标? - Arran
@MartinPrikryl 我正在阅读<a href="http://www.codeproject.com/Articles/371232/Escaping-in-Csharp-characters-strings-string-forma#Escaping-whatfor2">文章</a>,现在我明白了。 - user2195741
显示剩余2条评论
5个回答

10

它正在工作。在调试期间检查时,\\未被转义。尝试将该值打印到控制台窗口或网页上。

编辑* 看起来您有些困惑。

您的路径实际上不包含任何双斜杠\\,只是在调试时查看字符串时会对单斜杠进行转义。请考虑阅读有关转义序列的文章。

如果您想转义单个斜杠,则不要在替换中使用逐字字符串文字,例如string.Replace("\\", "-"),这将用连字符-替换路径中的所有单斜杠,但我不确定为什么要这样做?请注意,在调试期间检查时,这仍将显示具有\\斜杠的路径。打印到控制台窗口将显示:

C:-dev-vsprojects-VerificaionDeFirmas-VerificaionDeFirmas-verificaciondefirmas.txt


无法正常工作,因为路径中不包含双 \\ 字符。 - Myrtle
2
@Aphelion - 调试器会自动通过添加额外的“\”字符来转义反斜杠。 - keyboardP
@keyboardP 我知道,但是@'\'会搜索两个该字符。我认为因为它是一个路径,实际路径不包含双重字符。那么为什么要使用replace呢? - Myrtle
@Aphelion - 这是真的,但这并不意味着代码没有在工作,只是意味着它没有做任何有价值的事情。我以为你是指代码因为调试器显示了两个反斜杠而没有工作。 - keyboardP

3
手表窗口正在显示转义字符串。当它显示\\时,字符串只包含\
您的替换尝试替换\\,因为您正在使用字面指示符@
将替换代码更改为:
string clear_path = path.Replace("\\", "-");

1
使用"\\"而不是@"\\",因为这会寻找2个\字符。
请注意,可视化器始终显示\实际字符的\\符号。

1
这是您想要做的事情:

string clear_path = path.Replace(@"\","-");

调试器中的表示为\\,但这意味着转义字符\

2
@AdrianCarneiro - 你在编辑中通过添加“@”修复了它,但随后又将其删除。你需要使用verbatim符号(@)或使用“\”来转义“\”。 - keyboardP
1
@keyboardP 不知道为什么这个被还原了。它又回来了。 - Adriano Carneiro

0

你不应该进行双重转义,你可以这样做:

string clear_path = path.Replace("\\","-")

或者

string clear_path = path.Replace(@"\","-")

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