Le but est d'avoir une entrée de chaîne (venant du frontend), et cette chaîne doit être transformée pour agir comme un caractère échappé dans le backend.

Dans l'exemple suivant, je veux que l'utilisateur écrive "\" + "t", et le backend doit l'interpréter comme "\ t" (= tab char):

    var inputStr = @"\t"; // The input is a string written by a user: "\t" (backslash char + t char == @"\t" != "\t")
    var outputStr = SomeOperation(inputStr); // ???
    Console.WriteLine("A" + outputStr + "B <= should be tab separated");

J'ai essayé:

var outputStr = inputStr.Replace("\", "");
c#
1
Xavier Peña 20 nov. 2018 à 14:28

4 réponses

Meilleure réponse

J'ai enfin trouvé un moyen simple de le faire:

Regex.Unescape(inputStr);

Consultez la documentation de la Regex.Unescape pour plus de détails.

Exemple:

var ouptutStr = Regex.Unescape("\\t"); 
// ✓ Result: outputStr == "\t"
0
Xavier Peña 20 nov. 2018 à 12:51

Vous pouvez faire quelque chose comme ça:

void Main()
{
    Debug.Assert(ReplaceChar("hello\tworld", @"\t") == "helloworld"); // passed
}

string ReplaceChar(string str, string userInput)
{
    switch (userInput)
    {
        case @"\t":
            return str.Replace("\t","");
    }
    return str;
}
0
Bagherani 20 nov. 2018 à 11:36

var outputStr = Char.Parse("\t").ToString(); donne

Un B <= doit être séparé par des tabulations

Il n'est pas vu ici mais dans la console, il a l'air correctement.

-1
Miamy 20 nov. 2018 à 11:39

Ce n'est pas quelque chose qui est intégré. En fin de compte, "\t" == (une chaîne de longueur 1 contenant un caractère de tabulation) est implémenté par le compilateur C #, pas par le runtime. Il n'y a pas d'implémentation préexistante de cela dans le runtime, en partie parce que chaque langage (VB.NET, C #, F #, etc.) peut avoir ses propres règles.

Vous devrez écrire votre propre implémentation avec vos propres définitions des caractères d'échappement. Heureusement, c'est surtout un exercice en .Replace(...). Il y a quelques cas extrêmes à penser - en particulier pour la commande - cependant; par exemple, si \\ devient \ et \n devient une nouvelle ligne; \\n devient-il \n? ou devient-il \(newline)? fait naïvement, il peut finir simplement (nouvelle ligne) - c'est-à-dire foo.Replace(@"\\",@"\").Replace(@"\n","\n")

1
Marc Gravell 20 nov. 2018 à 11:43