Замена \ на \\ - PullRequest
       6

Замена \ на \\

1 голос
/ 11 августа 2010

У меня есть строка.Я хочу найти одну косую черту, а затем заменить "\" (одиночная косая черта) на "\" (двойная косая черта).

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;
 } 

`

Ответы [ 4 ]

7 голосов
/ 11 августа 2010

Вам необходимо избежать обратной косой черты или использовать дословный строковый литерал, а также понимать, что строки неизменны - Replace не изменяет существующую строку, она возвращает new string:

// Escaping with an extra backslash
updatedString = s.Replace("\\", "\\\\");

// Using a verbatim string literal
updatedString = s.Replace(@"\", @"\\");

Для получения дополнительной информации о экранировании и дословных строковых литералах см. мою статью strings .

3 голосов
/ 11 августа 2010

Вам необходимо использовать символ @ перед строковыми литералами, чтобы они принимались как дословно строки, а косая черта не интерпретировалась как escape-символы. Вы также можете «экранировать» символ \, но используя дополнительный \.

Например:

string s1 = @"\";
string s2 = @"\\";
string s3 = updatedString.Replace(s1,s2);

или

string s1 = "\\";
string s2 = "\\\\";
string s3 = updatedString.Replace(s1,s2);
1 голос
/ 11 августа 2010

Вам необходимо либо избежать обратной косой черты, либо использовать строковые литералы, поэтому попробуйте:

string Method1(string s) 
{
    return s.Replace(@"\", @"\\");
}

или

string Method1(string s) 
{
    return s.Replace("\\", "\\\\");
}

Есть и другие проблемы с вашим кодом - вы можете инициализироватьпеременные при их объявлении:

string upadtedString = s;

Метод Replace ничего не изменит, если не будет найдено \, поэтому if (s.Contains("\")).

* 1014 не требуется.* Строки являются неизменяемыми (не изменяются), поэтому вам нужно использовать string replaced = original.Replace(...);, а не ожидать, что orginal.Replace(...) изменит original на месте.

Вы можете объявить строки непосредственно в вызове метода, вместо использования s1 и s2.

0 голосов
/ 11 августа 2010
string Method1(string s) 
{
    return s.Replace(@"\", @"\\");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...