Remplacer " " par " " dans une chaîne en C#

je ne comprends toujours pas comment faire. J'ai vu beaucoup de posts à ce sujet, mais aucune des solutions n'a fonctionné pour moi.

j'ai une chaîne appelée "a\b". Le résultat dont j'ai besoin est"ab". Comment est-ce fait?

j'ai un fichier texte qui a une chaîne de connexion de base de données pointant vers une instance appelée - ServerDbInstance

mon but est de faire une chaîne remplacer dans le fichier texte -- Remplacer "serveur DbInstance" avec une autre valeur, dire " 10.11.12.13, 1200".

j'ai Donc:

stringToBeReplaced = @"ServerDbInstance";
newString = @"10.11.12.13, 1200";

C'est là que le problème commence. Mon stringToBeReplaced sera toujours "ServerDbInstance", et quand je cherche cette chaîne dans mon fichier texte, la recherche échoue, car le fichier texte n'a pas de chaîne" ServerDbInstance"; à la place il n'a que"ServerDbInstance". Alors, comment changer "Server DbInstance"en" ServerDbInstance"?

32
demandé sur Peter Mortensen 2011-09-20 12:42:54

7 réponses

je soupçonne votre chaîne déjà en fait, ne contient qu'un seul antislash, mais vous le regardez dans le débogueur qui l'échappe pour vous dans une forme qui serait valide comme une chaîne de caractères littérale régulière en C#.

si vous l'Imprimez dans la console, ou dans une boîte de message, est-ce qu'il s'affiche avec deux antislashs ou un?

Si vous en fait, vous voulez remplacer un double backslash par un seul, c'est facile à faire donc:

text = text.Replace(@"\", @"\");

... mais je pense que l'original ne contient pas de double backslash de toute façon. Si cela ne vous aide pas, veuillez donner plus de détails.

EDIT: En réponse à la modification de la question, votre stringToBeReplaced n'a qu'un seul antislash. Vraiment. Là où vous voyez deux backslashs, ce spectateur s'échappe. La chaîne elle-même n'a pas deux barres obliques. Examinez stringToBeReplaced.Length et compter les caractères.

62
répondu Jon Skeet 2011-09-20 09:13:49

j'ai essayé les procédures de vos messages, mais sans succès.

voici ce que j'obtiens de debugger: enter image description here

la chaîne originale que je sauve dans la base de données sqlite était b\r\na .. quand je les lis, je reçois b\r\na (la longueur du débogueur est de 6: "b" "\" "\r" "\" "\n" "a") puis j'essaie de remplacer cette chaîne et j'obtiens la chaîne avec la longueur 6 de nouveau (vous pouvez voir dans l'image ci-dessus).

j'exécute ce script court dans mon formulaire de test avec un seul texte boîte:

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

et j'obtiens ceci dans la zone de texte (donc pas de caractères de nouvelle ligne entre "b" et "a":

b\r\na

Length: 6

Que puis-je faire avec cette chaîne pour désamorcer backslash? (J'attends une nouvelle ligne entre" b "et"a".)

Solution:

OK, ce n'est pas possible avec le remplacement standard, à cause de \r et \n est un caractère. Il est possible de remplacer une partie du caractère de la chaîne par le caractère mais pas possible de remplacer " moitié le cadre" d'un seul caractère. Ainsi, je dois remplacer tout caractère spécial separatelly, comme ceci:

private void Form_Load(object sender, EventArgs e) {
    ...
    string z = x.Replace(@"\r\n", Environment.NewLine);
    ...

C'produire de résultat correct pour moi:

b
a
6
répondu Atiris 2013-05-13 08:30:56

dans le cas où quelqu'un est coincé avec cela et aucune des réponses ci-dessus travaillé, ci-dessous est ce qui a fonctionné pour moi. Espérons que cela aide.

var oldString = "\r|\n";

// None of these worked for me
// var newString = oldString(@"\", @"\");
// var newString = oldString.Replace("\\", "\");
// var newString = oldString.Replace("\u5b89", "\u5b89");
// var newString = Regex.Replace(oldString , @"\", @"\");

// This is what worked
var newString = Regex.Unescape(oldString);
// newString is now "\r|\n"
2
répondu niki b 2018-06-05 19:22:27

-

var newstring = @"a\b".Replace(@"\",@"\");
1
répondu ipr101 2011-09-20 08:48:40
string a = @"a\b";
a = a.Replace(@"\",@"\");

ça devrait marcher. Rappelez-vous que dans le spectacle de Visual Studio de montre le "\" échappé de sorte que vous voyez "\" à la place d'un seul.

0
répondu Felice Pollano 2011-09-20 08:45:27

Vous pouvez simplement faire un remplacement dans votre chaîne comme

Str.Replace(@"\",@"\");
0
répondu Mehran 2011-09-20 08:47:59

j'avais le même problème jusqu'à ce que je lise la réponse de Jon Skeet à propos du débogueur affichant un simple antislash avec un double antislash même si la chaîne peut avoir un seul antislash. Je n'étais pas au courant de cela. J'ai donc changé mon code de

text2 = text1.Replace(@"\", @"/");

text2 = text1.Replace(@"\", @"/");

et qui a résolu le problème. Note: i'm interfacing and R.Net qui utilise des barres obliques simples dans les chaînes de chemins.

0
répondu WalterWeinzinger 2017-04-04 00:56:37