【问题标题】:C# string.replace to remove illegal characters [duplicate]C# string.replace 删除非法字符[重复]
【发布时间】:2012-06-09 12:45:32
【问题描述】:

我正在开发一个程序,该程序可以读取文件并根据其专栏的标题保存其中的片段。其中一些标题的文件名包含非法字符,因此我编写了这段代码来处理这些问题。

string headerfile = saveDir + "\\" + tVS.Nodes[r].Text.Replace("\"", "").Replace
              ("/","").Replace(":"," -").Replace(">","(Greater Than)") + ".csv";

在我没有 4 个.Replace() 的情况下,有没有更好的方法?还是有某种我不知道的内置非法字符删除器?

谢谢!

编辑:它不需要用任何特定的字符替换字符。一个空格就足够了。

【问题讨论】:

  • 如果您只是删除非法字符,您可以大大简化它,但考虑到您将其中大部分替换为其他内容,您会限制很多选项。
  • 我不需要称它们为特定的名称,它可以只是一个空白的“”。

标签: c# string


【解决方案1】:

正则表达式通常是实现此目的的好方法,但当您用不同的东西替换每个字符时则不然。您可能会考虑将它们全部替换为相同的东西,并且只使用 System.IO.Path.GetInvalidFileNameChars()

string filename = tVS.Nodes[r].Text;

foreach(char c in System.IO.Path.GetInvalidFileNameChars()) {
    filename = filename.Replace(c, '_');
}

【讨论】:

  • 这样的问题是,如果文件有更多连续的无效字符,则将插入多个连续的“_”,例如文件“my\\\file\\\\\\\\\ \name" 转换为 "my___file__________name"。这很好,但更好的解决方案是将其结尾为“my_file_name”。
【解决方案2】:

System.IO.Path.@987654321@ 包含所有无效字符。

这是一个示例方法:

public static string SanitizeFileName(string fileName, char replacementChar = '_')
{
    var blackList = new HashSet<char>(System.IO.Path.GetInvalidFileNameChars());
    var output = fileName.ToCharArray();
    for (int i = 0, ln = output.Length; i < ln; i++)
    {
        if (blackList.Contains(output[i]))
        {
            output[i] = replacementChar;
        }
    }
    return new String(output);
}

【讨论】:

  • 这在2021大炮里也是个可爱的功能
【解决方案3】:

看看 Regex.Replace here,它可以满足您在单独删除字符方面的所有需求。选择性替换其他字符串可能会比较棘手。

【讨论】:

    【解决方案4】:
    string charsToRemove = @"\/:";TODO complete this list
    
    string filename;
    
    string pattern = string.format("[{0}]", Regex.Escape(charsToRemove));
    Regex.Replace(filename, pattern, "");
    

    如果您只想删除非法字符,而不是用其他字符替换它们,您可以使用它。

    【讨论】:

    • 它不适用于很多人。在最后一行中,您应该将 Regex 修改后的值放入某个字符串变量,即 filename = Regex.Replace(filename, pattern, "");
    猜你喜欢
    • 2016-08-15
    • 2022-11-21
    • 2019-02-24
    • 2013-02-08
    • 2022-01-26
    • 2020-02-04
    • 2015-06-07
    • 2011-03-16
    • 2021-07-02
    相关资源
    最近更新 更多