我有一个字符串。我想搜索一个斜杠,然后用“\”(双斜杠)替换“\”(单斜杠)。
string Method1(string s)
{
string upadtedString = s;
if (s.Contains("\\"))
{
//do nothing
}
else if(s.Contains("\"))
{
string s1 = "\";
string s2 = "\\";
upadtedString.Replace(s1,s2);
s = upadtedString;
}
return s;
}
`
答案 0 :(得分:7)
您需要转义反斜杠或使用逐字字符串文字,并且还要了解字符串是不可变的 - Replace
不会更改现有的字符串,它会返回 new string:
// Escaping with an extra backslash
updatedString = s.Replace("\\", "\\\\");
// Using a verbatim string literal
updatedString = s.Replace(@"\", @"\\");
有关转义和逐字字符串文字的详细信息,请参阅我的strings article。
答案 1 :(得分:3)
您需要在字符串文字前面使用@
字符,以确保它们被视为 verbatim 字符串,并且您的斜杠不会被解释为转义字符。您还可以“转义”\
字符,但使用其他\
。
例如:
string s1 = @"\";
string s2 = @"\\";
string s3 = updatedString.Replace(s1,s2);
或
string s1 = "\\";
string s2 = "\\\\";
string s3 = updatedString.Replace(s1,s2);
答案 2 :(得分:1)
您需要转义反斜杠或使用字符串文字,因此请尝试:
string Method1(string s)
{
return s.Replace(@"\", @"\\");
}
或
string Method1(string s)
{
return s.Replace("\\", "\\\\");
}
您的代码还存在其他问题 - 您可以在声明变量时初始化变量:
string upadtedString = s;
如果找不到Replace
,\
方法不会改变任何内容,因此不需要if (s.Contains("\"))
。
字符串是不可变的(请勿更改),因此您需要使用string replaced = original.Replace(...);
而不是期望orginal.Replace(...)
更改original
。
您可以直接在方法调用中声明字符串,而不是使用s1
和s2
。
答案 3 :(得分:0)
string Method1(string s)
{
return s.Replace(@"\", @"\\");
}