【问题标题】:replace \\ with \ using Replace() [duplicate]使用 Replace() 将 \\ 替换为 \ [重复]
【发布时间】:2018-12-07 20:01:18
【问题描述】:

检查下面的代码。我试图找到\\ 并用\ 单反斜杠替换,但似乎Replace() 方法不能做到这一点。我在test2 变量上一直得到相同的结果。

我该如何解决这个问题?

string test1 = "C:\\Users\\lik\\Desktop\\foo\\BacklogExcelGenerator\\bin\\Debug\\foo.xlsx";


string test2 = test1.Replace("\\", @"\");

【问题讨论】:

  • 在 C# 字符串中,\\ 是您表示单个 \ 的方式,因此您的尝试可能没有必要。 (如果您在调试器中查看 test1,您会再次看到 \\ 但实际上 - 当您在其他地方打印或显示字符串时 - 只有一个 \ 存在)
  • 但是"\\" 一个单斜杠...
  • 是的,test1 包含任何双反斜杠。请注意,C# 调试器喜欢向您展示“您必须在 C# 源代码中为字符串文字编写的内容”,而不是“字符串的确切当前内容”。因此,如果这就是您正在寻找和发现问题的地方,那就不是真实的。
  • 通常在表达路径时,我们会使用@ 符号来指示包含的文本是字符串文字:@"C:\Users\lik\Desktop\foo\BacklogExcelGenerator\bin\Debug\foo.xlsx"
  • @John Doe ,我运行了您编写的代码,请再次确认它是否正常工作,它对我来说是完美的工作。这是镜头:ibb.co/XyLsh49

标签: c#


【解决方案1】:

\ 用作字符串中的转义字符。转义字符用于对字符串中的特殊“非打印”字符进行编码,例如 \n 是换行符 \" 是引号等。因为 \ 是转义字符,为了编写 \ 我们必须将其转义并将其写为\\ 这在代码中显示为双斜杠,如果您在调试器中查看该字符串,但在内存中以及打印到屏幕时均显示为 1。

例如

string s = "The quick \"brown\" fox jumped\nOver the lazy dog. \\\\o_o//";

将打印到屏幕上

The quick "brown" fox jumped
Over the lazy dog.\\o_o//

escape sequences 上进行一些简单的阅读,你会很高兴的

@"" 在 C# 中创建的逐​​字字符串会将所有内容视为文字并且没有转义字符,如果您想要换行符,则必须将字符串写入 2 行以上。您可以在逐字字符串中进行的唯一转义是 ",这是由 "" 完成的

string s = @"The quick ""brown"" fox jumped
Over the lazy dog. \\o_o/";

将与上面的转义字符串具有相同的输出

The quick "brown" fox jumped
Over the lazy dog.\\o_o//

【讨论】:

    【解决方案2】:

    "\\"@"\" 是包含斜杠 '\' 的相等字符串。因此,您的方法将 '\' 替换为 '\'

    \ 是一个特殊字符,用于声明其他一些值,例如 \n - 新行,\t - 制表符等。单斜杠写成\\

    阅读文章Escape Sequences了解更多信息。

    【讨论】:

      【解决方案3】:

      您在 \\ 中缺少要替换的 @,请记住 \ 是转义字符,因此您只要求编译器使用一个小节 最后你应该有这样的东西来代替双栏

      string test2 = test1.Replace(@"\\", @"\");
      

      这样你会指出\\也是字面意思

      【讨论】:

      • 但是请注意,在所问问题的上下文中:首先没有要替换的双斜杠
      • 你是对的。该字符串没有任何要替换的双斜杠,因为它也不是文字。好收获
      • 告诉 OP 如何“改进”/更改他们的第二行毫无意义。问题不在于第二行 - 问题在于他/她并不需要第二行,而且还不明白这一点。 OP 的原始第二行什么都不做,而您的新代码什么也不做(基于 OP 的 test1 值)。
      猜你喜欢
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      相关资源
      最近更新 更多