美好的一天,我今天加入。
我在文本文件中有一个设置。
logSeparator = \吨
这将在启动期间读入Properties.Settings(字符串)。
当我把它读成字符串时,它将变为“\\ t”
所以我有一个临时解决办法来保持工作:
if (Properties.Settings.Default.logSeparator == "\\t") { //trim \t
Properties.Settings.Default.logSeparator = "\t";
Properties.Settings.Default.Save();
}
应该有一些简单的方法来清理这个字符串并使其成为一个字符
“\ t”,现在,如果enduser决定开始使用例如“\ r”作为分隔符
字符不起作用。
我看起来像这样容易: string_name.Replace(“\\”,“\”); //(这不起作用)
请帮助,我相信必须有简单而干净的方式来做到这一点,但是花了很长时间才谷歌试图解决这个问题并找不到任何东西。
答案 0 :(得分:2)
您的问题在于您如何将这些内容翻译成标签。在您的文件中,它只是普通字符:\t
。但实际的制表符是不同的。当C#处理文字字符串时,它会将\t
转换为一个标签(除非你告诉它不要使用@
字符串前缀)。
所以你需要做的是模仿替换。你已经尝试过这个,但针对了错误的角色。你需要做的是:
string_name.Replace("\\t", "\t")
有更好的方法可以替换控制字符,您可能需要考虑允许转义反斜杠。但是在最基本的层面上,这应该让你前进。
答案 1 :(得分:0)
如果您只使用string.Format(logSeparator),它将转换它。你不需要做\剥离。我猜你在观察窗口看到的将是字符序列的转义版本。即字符串\ t将在监视窗口中显示为\\ t,以区别于制表符 - 它实际上在字符串中没有两个反斜杠。
答案 2 :(得分:0)
由于反斜杠由C#自动转义,因此最后一个字符不包含反斜杠。
我建议将logSeparator的类型更改为char,因为每次使用该字符串时都会发生此行为。这是一个简单的方法,它接受一个字符串,并根据字符串中的最后一个字符返回正确的控制字符:
private char GetSeparator(string Input)
{
char separator = new char();
switch (Input.Last())
{
case 't':
separator = '\t';
break;
case 'r':
separator = '\r';
break;
}
return separator;
}
您可以轻松添加所需的任何其他案例陈述。 我假设你正在使用readline方法,以便修剪新的行字符。如果不是这样,可能需要先完成。