我有一个WPF应用程序,它正在捕获一些文本,如下所示:
<TextBox x:Name="MyText" Text="\n,\r"/>
然后我将它传递给一个函数,该函数检查字符串中是否存在这些字符:
MyFunc(MyText.Text);
但角色正在逃脱;所以MyText.Text看起来像这样:
"\\n,\\r"
如何防止字符串被转义(如果它是文字,我可以简单地使用@
字符,但这是由用户输入的)?
答案 0 :(得分:1)
如何用\\
替换\
?:
string unescapedValue = MyText.Text.Replace(@"\\", @"\");
但是,我怀疑您的文本值只是在Visual Studio Intellisense中被转义...当您调用它时,您会得到什么价值:
int actualLength = MyText.Text.Length;
我怀疑您的"\\n,\\r"
值会返回3
,因为那里只有3个字符。如果我错了,只需使用第一个例子。
答案 1 :(得分:1)
你确定吗? 我怀疑你正在看调试和调试鼠标会逃脱。
尝试
System.Diagnostics.Debug.WriteLine(MyText.Text);
System.Diagnostics.Debug.WriteLine(MyText.Text.Length.ToString());
长度为5,因为\ n是两个字符,而不是一个控制字符。
答案 2 :(得分:1)
您需要通过检测本身已转义的转义码来手动取消文本。你可以这样做:
private static string Unescape(string value) {
if (value == null)
return null;
var length = value.Length;
var result = new StringBuilder(length);
for (var i = 0; i < length; i++) {
var c = value[i];
if (c == '\\' && i++ < length) {
c = value[i];
switch (c) {
case 'n':
result.Append('\n');
break;
case 'r':
result.Append('\r');
break;
case 't':
result.Append('\t');
break;
case '\\':
result.Append('\\');
break;
default:
result.Append(c);
break;
}
}
else {
result.Append(c);
}
}
return result.ToString();
}
答案 3 :(得分:1)
我遇到了您遇到的同样问题,我在阅读完这篇文章后设法解决了这个问题How can I Unescape and Reescape strings in .net?
System.Text.RegularExpressions.Regex.Unescape(MyText.Text);
它会自动转义你的字符串
\\n => \n
\\t => \t
我可以看到很多人都不明白这是如何导致问题的
一个简单的例子如下所示:
var delimiter = MyText.Text; // this will give you \\t, if you type \t in the textbox
string[] data = new string[] { "hello", "world" };
var concatData = String.Join(text, data);
// concatData will return => hello\\tworld\\t rather than hello world
答案 4 :(得分:0)
您应该将文本框绑定到某个属性。 您无法直接通过设计器设置格式化文本。