Remplacer “\\” avec “\” dans une chaîne de caractères 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 de caractères appelée "a\\b". Le résultat que j'ai besoin est un "\b". Comment est-ce fait?
J'ai un fichier texte qui a une base de données de la chaîne de connexion pointant vers une instance appelée Serveur\DbInstance
Mon but est de faire une chaîne de remplacer dans le fichier texte -- replace "Server\DbInstance" avec une autre valeur, dire "10.11.12.13, 1200".
J'ai donc:
stringToBeReplaced = @"Server\DbInstance";
newString = @"10.11.12.13, 1200";
C'est là que le problème commence. Mon stringToBeReplaced sera toujours "Serveur\\DbInstance", et quand je recherche pour cette chaîne de caractères dans mon fichier texte, la recherche échoue, le fichier texte ne dispose pas d'un fil "Serveur\\DbInstance"; au lieu de cela, il n'a qu'à "Server\DbInstance". Alors comment faire pour changer de Serveur "\\DbInstance" à "Server\DbInstance"?
- avez-vous besoin d'une chaîne qui a la valeur "a\ \ b", écrit "a\ \ b" lorsque son imprimé?
Vous devez vous connecter pour publier un commentaire.
Je soupçonne votre chaîne déjà fait ne contient qu'une seule barre oblique inverse, mais vous êtes en train de regarder dans le débogueur qui s'échappe pour vous dans une forme qui serait valide comme une chaîne littérale en C#.
Si l'imprimer dans la console ou dans une boîte de message, ne montre pas avec deux barres obliques inverses ou un seul?
Si vous fait souhaitez remplacer un double barre oblique inverse avec une seule, c'est facile à faire:
... mais ma conjecture est que l'original ne contient pas une double barre oblique inverse 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'une seule barre oblique inverse dans. Vraiment. Partout où vous voyez les deux barres obliques inverses, que le spectateur est lui échapper. La chaîne elle-même n'a pas deux barres obliques inverses. ExaminerstringToBeReplaced.Length
et de compter les caractères.stringToBeReplaced
est vraiment déclarée comme indiqué dans votre exemple de code, qui n'a pas de sens - parce que le code que vous avez n'a en fait qu'une barre oblique inverse. Peut-être qu'il n'est pas vraiment représentatif de votre code réel?J'ai essayé les procédures de vos messages, mais sans succès.
C'est ce que je reçois de débogueur:
Chaîne d'origine que j'ai enregistrer dans la base de données sqlite a été
b\r\na
.. quand je les lis, je reçoisb\\r\\na
(longueur dans le débogueur est 6:"b" "\" "\r" "\" "\n" "a"
) puis j'ai essayer de remplacer cette chaîne et je reçois chaîne d'une longueur de 6 à nouveau (vous pouvez le voir dans l'image ci-dessus).Je lance ce petit script dans mon formulaire de test avec une seule zone de texte:
et je reçois ce dans la zone de texte (donc pas de caractères de nouvelle ligne entre "b" et "a":
Que puis-je faire avec cette chaîne pour ne pas encoder barre oblique inverse? (J'attends des nouvelles de la ligne entre "b" et "a".)
Solution:
OK, ce n'est pas possible de le faire avec la norme remplacer, en raison de
\r
et\n
est un caractère. Est possible de remplacer une partie de la chaîne caractère par caractère, mais pas possible de remplacer "la moitié" d'un seul caractère. Donc, je dois remplacer tous les caractères spéciaux separatelly, comme ceci:Produire ce résultat correct pour moi:
"my\\r\\nstring".Replace(@"\r\n", "\r\n")
œuvres. Avis seul le texte à remplacer a la@
en face d'elleau cas où quelqu'un s'est coincé avec ce et aucune des réponses ci-dessus a travaillé, voici ce qui a fonctionné pour moi. Espérons que cela aide.
J'ai eu le même problème jusqu'à ce que j'ai lu Jon Skeet réponse sur le débogueur de l'affichage d'une seule barre oblique inverse avec une double barre oblique inverse même si la chaîne peut avoir une seule barre oblique inverse. Je n'étais pas au courant de cela.
J'ai donc modifié mon code de
à
et qui a résolu le problème.
Remarque: je suis d'interface et de R.Net qui utilise seul des barres obliques dans les chaînes de chemin.
Essayez -
devrait fonctionner.
Rappelez-vous que la montre Visual STudio montrer le "\" échappé à vous voir "\" à la place d'un seul.
Vous pouvez simplement faire un remplacement dans votre chaîne comme