在C#中的string中用“\”replace“\\”
我仍然没有得到如何做到这一点。 我看到很多关于这个的post,但没有一个解决scheme为我工作。
我有一个名为“a \\ b”的string。 我需要的结果是“a \ b”。 这是怎么做的?
我有一个文本文件,它有一个数据库连接string,指向一个名为 – Server \ DbInstance的实例
我的目标是在文本文件中进行stringreplace – 将“Server \ DbInstance”replace为另一个值,例如“10.11.12.13,1200”。
所以我有:
stringToBeReplaced = @"Server\DbInstance"; newString = @"10.11.12.13, 1200";
这是问题的起点。 我的stringToBeReplaced将始终是“Server \\ DbInstance”,当我在我的文本文件中search此string时,search失败,因为文本文件没有string“Server \\ DbInstance”; 而只有“Server \ DbInstance”。 那么如何将“Server \\ DbInstance”更改为“Server \ DbInstance”?
我怀疑你的string已经实际上只包含一个反斜杠,但是你正在debugging器中查看它,它正在为你转换成一个在C#中作为常规string文本有效的forms。
如果在控制台或消息框中打印,是否显示两个反斜杠或一个?
如果你真的想用一个双反斜杠代替,那么很容易:
text = text.Replace(@"\\", @"\");
…但我的猜测是,原来不包含双反斜杠。 如果这没有帮助,请给出更多的细节。
编辑:为了响应编辑的问题,你的stringToBeReplaced
只有一个反斜杠英寸真的。 无论你在哪里看到两个反斜杠,那个观众都在逃避它。 string本身没有两个反斜杠。 检查stringToBeReplaced.Length
并计数字符。
我试过你的post的程序,但没有成功。
这是我从debugging器得到的:
我保存到sqlite数据库的原始string是b\r\na
。当我读它们时,我得到b\\r\\na
(debugging器中的长度是6: "b" "\" "\r" "\" "\n" "a"
)然后我尝试replace这个string,然后再次获得长度为6的string(您可以在上面的图片中看到)。
我只用一个文本框在我的testing表单中运行这个简短的脚本:
private void Form_Load(object sender, EventArgs e) { string x = "b\\r\\na"; string y = x.Replace(@"\\", @"\"); this.textBox.Text = y + "\r\n\r\nLength: " + y.Length.ToString(); }
我在文本框中得到这个(所以,“b”和“a”之间没有新的行字符:
b\r\na Length: 6
我可以用这个string来做unescape反斜杠吗? (我期望在“b”和“a”之间有新的界限。)
解:
好的,这是不可能的与标准的replace,因为\r
和\n
是一个字符。 可以用字符replace部分string,但不能replace一个字符的“半部分”。 所以,我必须单独replace任何特殊的字符,像这样:
private void Form_Load(object sender, EventArgs e) { ... string z = x.Replace(@"\r\n", Environment.NewLine); ...
这对我来说产生了正确的结果:
b a
尝试 –
var newstring = @"a\\b".Replace(@"\\",@"\");
string a = @"a\\b"; a = a.Replace(@"\\",@"\");
应该工作。 请记住,在手表Visual STudio显示“\”转义,所以你看到“\”代替一个单一的。
你可以简单地在你的string中进行replace
Str.Replace(@"\\",@"\");
直到我阅读Jon Skeet关于debugging器显示带有双反斜杠的单个反斜杠的答案之前,我遇到了同样的问题,即使该string可能只有一个反斜杠。 我没有意识到这一点。 所以我改了我的代码
text2 = text1.Replace(@"\\", @"/");
至
text2 = text1.Replace(@"\", @"/");
并解决了这个问题。 注意:我正在连接和R.Net,它在pathstring中使用单个正斜杠。
我不知道你是如何编写代码的,但应该是这样的
string yourVar = "a\\b"; yourVar = yourVar.Replace("\\","\");