1

美好的一天,我今天加入了。

我在文本文件中有一个设置。

日志分隔符=\t

这将在启动期间读入 Properties.Settings(string)。

当我将其读入字符串时,它将变为“\\ t”

所以我有一个临时修复来保持工作:

if (Properties.Settings.Default.logSeparator == "\\t") { //trim \t

            Properties.Settings.Default.logSeparator = "\t";
            Properties.Settings.Default.Save();

        }

应该有一些简单的方法来清理这个字符串并使它成为一个字符

“\t”,现在,如果最终用户决定开始使用例如“\r”作为分隔符

性格是行不通的。

我看起来像这样简单: string_name.Replace("\\", "\"); //(这不起作用)

请帮忙,我确信必须有一种简单而干净的方式来做到这一点,但是在谷歌上花了很长时间试图弄清楚这一点并且找不到任何东西。

4

3 回答 3

3

您的问题在于您如何看待这些被翻译成标签。在您的文件中,它只是普通字符:\t. 但实际的制表符是不同的。当 C# 处理文字字符串时,它会\t为您转换为选项卡(除非您告诉它不要使用@字符串前缀)。

所以你需要做的是模拟替换。您已经尝试过了,但定位到了错误的角色。你需要做的是:

string_name.Replace("\\t", "\t")

有更好的方法来替换控制字符,您可能需要考虑允许转义反斜杠。但在最基本的层面上,这应该能让你继续前进。

于 2013-07-01T01:48:11.470 回答
0

如果您只使用 string.Format(logSeparator) 它将转换它。你不需要做你的 \ 剥离。我猜你在监视窗口中看到的将是字符序列的转义版本。即字符串 \t 将在监视窗口中显示为 \\t 以将其与制表符区分开来 - 它实际上在字符串中没有两个反斜杠。

于 2013-07-01T02:23:00.460 回答
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;
    }

您可以轻松添加任何其他需要的 case 语句。我假设您正在使用 readline 方法,以便修剪换行符。如果没有,可能需要先完成。

于 2013-07-01T06:00:05.387 回答