2010-08-11 5 views
1

J'ai une chaîne. Je veux rechercher une seule barre oblique et remplacer "\" (barre oblique simple) par un "\" (double barre oblique).Remplacer par \

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

`

+1

remercie tous, est-il autorisé à utiliser la chaîne ou devrait utiliser constructeur de chaîne? – myWorld

Répondre

1

Vous devez soit échapper à vos antislashs ou littéraux de chaîne d'utilisation, alors essayez:

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

ou

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

Il y a aussi d'autres problèmes avec votre code - vous pouvez initialiser des variables lorsque vous les déclarez:

string upadtedString = s; 

La méthode Replace ne changera rien s'il n'y a pas \ à trouver, donc il n'y a pas besoin de if (s.Contains("\")).

Les chaînes sont immuables (ne pas modifier). Vous devez donc utiliser string replaced = original.Replace(...); plutôt que d'attendre orginal.Replace(...) pour remplacer original.

Vous pouvez déclarer des chaînes directement dans l'appel de méthode au lieu d'utiliser s1 et s2.

7

Vous devez échapper antislashs ou utiliser une chaîne littérale mot à mot, et comprendre aussi que les chaînes sont immuables - Replace ne change pas la chaîneexistante, il retourne une nouvelle chaîne :

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

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

Pour plus d'informations sur les littéraux de chaîne d'échappement et verbatim, voir mon strings article.

+0

Salut, pourriez-vous s'il vous plaît suggérer une meilleure façon de gérer les caractères d'échappement. Il ya un autre message par moi – myWorld

+1

@starz: Cela dépend de ce que vous entendez par "gérer". Vous devez être beaucoup plus clair dans vos questions. –

+0

Je veux dire que j'obtiens des chaînes d'entrée qui peuvent contenir \ 0, \, \\, \ t, \ a etc. Ce sont des entrées que je reçois d'une autre application.SO quand j'obtiens une telle chaîne, Mon application sérialise puis désérialise la chaîne. Considérant un cas d'entrée "\ 0 Mesg", je reçois une exception lors de la déserailation. Donc, je veux modifier le strin à "\\ 0Mesg" et ensuite effectuer une sérialisation afin que je puisse éviter une exception lors de la désérialisation. – myWorld

3

Vous devez utiliser le caractère @ devant vos chaînes de caractères littérales pour vous assurer qu'elles sont considérées comme verbatim et que vos barres obliques ne soient pas interprétées comme des caractères d'échappement. Vous pouvez également "échapper" le caractère \ mais en utilisant un \ supplémentaire.

Par exemple:

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

ou

string s1 = "\\"; 
string s2 = "\\\\"; 
string s3 = updatedString.Replace(s1,s2); 
0
string Method1(string s) 
{ 
    return s.Replace(@"\", @"\\"); 
}