目标是要有一个字符串输入(来自前端),并且应该转换此字符串以使其在后端充当转义字符。
在下面的示例中,我希望用户编写“ \” +“ t”,后端应将其解释为“ \ 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");
我尝试过:
var outputStr = inputStr.Replace("\", "");
答案 0 :(得分:1)
这不是内置的东西。最终,"\t"
==(长度为1的字符串,包含制表符)由C#编译器而非运行时实现。在运行时中尚无此实现,部分原因是每种语言(VB.NET,C#,F#等)可以有自己的规则。
您将需要使用自己的转义符定义来编写自己的实现。幸运的是,它主要是在.Replace(...)
中进行的练习。尽管有 一些极端的情况需要考虑-特别是在订购方面-例如,如果\\
变成\
,而\n
变成换行符; \\n
变成\n
吗?还是变成\(newline)
?天真地完成了它,它可以最终变成(换行符)-即foo.Replace(@"\\",@"\").Replace(@"\n","\n")
答案 1 :(得分:0)
您可以执行以下操作:
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;
}
答案 2 :(得分:0)
我终于找到了一种简单的方法:
Regex.Unescape(inputStr);
有关更多详细信息,请参见documentation of the Regex.Unescape
功能。
示例:
var ouptutStr = Regex.Unescape("\\t");
// ✓ Result: outputStr == "\t"
答案 3 :(得分:-1)
var outputStr = Char.Parse("\t").ToString();
给
A B <=应该用制表符分隔
此处未显示,但在控制台中看起来正确。