【问题标题】:Removing Escape Characters for a string删除字符串的转义字符
【发布时间】:2020-11-11 07:22:26
【问题描述】:

我对转义字符有点问题是我从 txt 文件中读取的字符串, 它们稍后在我的程序中导致错误,需要将它们删除,但我似乎无法将它们过滤掉

  public static List<string> loadData(string type)
    {
        List<string> dataList = new List<string>();
        try
        {
            string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Data");
            string text = File.ReadAllText(path + type);


            string[] dataArray = text.Split(',');


            foreach (var data in dataArray)
            {
                string dataUnescaped = Regex.Unescape(data);
                if (!string.IsNullOrEmpty(dataUnescaped) && (!dataUnescaped.Contains(@"\r") || (!dataUnescaped.Contains(@"\n"))))
                {
                    dataList.Add(data);
                }
            }
            return dataList;
        }
        catch(Exception e)
        {
            Console.WriteLine(e);
            return dataList;
        }
    }

我试过 text.Replace(@"\r\n") 和一个 if 语句,但我似乎无法从我的字符串中删除它们

任何想法将不胜感激

【问题讨论】:

  • 删除 @,因为 @ 意味着您希望 \ 是一个字符的意思,而不是与 n 组合并搜索换行符,它将改为搜索字符串中任何出现的 \n。这可能就是为什么 replace 函数和 if 没有按照您的预期做的原因。

标签: c# string escaping


【解决方案1】:

如果您在字符串前添加@ 符号,这意味着您指定您想要一个字符串而无需转义任何字符。

所以如果你想要一个没有@ 的路径,你需要这样做:

string s = "c:\\myfolder\\myfile.txt"

但是,如果您在 \n\r 之前添加 @ 而不是转义序列 Windows 新行,您将获得字符串 "\n\r"

因此,这将导致您删除所有出现的 字符串 "\n\r"。而不是你想要的 NewLines:

text.Replace(@"\r\n")

要解决这个问题,您需要使用:

text = text.Replace(Environment.NewLine, string.Empty);

您也可以使用Environment.NewLine 代替\r\n,因为Environment 知道您当前使用的是哪个操作系统,并据此更改替换的字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多