当我在XML配置文件中编写分隔符值时出现此问题,通常当您在XML配置中编写类似"\t"
的字符串时,像XDocument
这样的解析器类会自动将其转换为{ {1}}以便从配置中解析的字符串中获得反斜杠和@"\\t"
。但是,我想要的只是一个制表符而不是一个双字符串。
所以问题变成:给定一个包含转义序列的字符串,如't'
,如何将其转换为单字符选项卡?
答案 0 :(得分:4)
如何删除@
前缀?
Verbatim和普通字符串文字是在源代码中编写字符串的方法。在运行时,它们之间没有区别。然后他们只是简单的字符串。
如果要在运行时处理转义序列,可以执行以下操作:
string ReplaceEscapeSequences(string s)
{
Contract.Requires(s != null);
Contract.Ensures(Contract.Result<string>() != null);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.Length; i++)
{
if(s[i] == '\\')
{
i++;
if(i == s.Length)
throw new ArgumentException("Escape sequence starting at end of string", s);
switch(s[i])
{
case '\\':
sb.Append('\\');
break;
case 't':
sb.Append('\t');
break;
...
}
}
else sb.Append(s[i]);
}
return sb.ToString();
}
答案 1 :(得分:2)
您可以这样做:
stringValue = stringValue.Replace("\\t", "\t");
我编写了以下方法来替换一堆常见的转义字符序列。
public static string LiteralValue(this string value)
{
return value
.Replace("\\\\", "\\")
.Replace("\\a", "\a")
.Replace("\\b", "\b")
.Replace("\\f", "\f")
.Replace("\\n", "\n")
.Replace("\\r", "\r")
.Replace("\\t", "\t")
.Replace("\\v", "\v")
.Replace("\\0", "\0");
}