C# 字符串生成器替换为 null 值

本文关键字:null 替换 字符串 | 更新日期: 2023-09-27 18:36:31

我试图使用 Stringbuilder 为我构建一个 csv 文件,我正在使用的文件中的一些字段带有双引号。我有这段代码,如您所见,我正在尝试使用 .replace 删除"并替换为 nothing ,这会抛出一个空的字符文字错误。有没有更简单的方法来删除所有双引号 '

public void Manipulatefile(string csv, string suffix)
    {
        StringBuilder formattedData = new StringBuilder();
        // Read all file lines into a string array.
        string path = @csv;
        string[] fileLines = File.ReadAllLines(path);
        foreach (string fileLine in fileLines)
        {
            string[] lineItems = fileLine.Split(new char[1] { ',' });

            string forename = lineItems[0];

            string surname = lineItems[1];

            formattedData.Append(forename);
            // Add the CSV seperator.
            formattedData.Append(",");
            // Append the forename to the current CSV output line.
            formattedData.Append(surname);

            formattedData.Append(",");
            formattedData.Append(forename.Substring(1,1));
            formattedData.Append(surname);
            formattedData.Append(suffix);
            formattedData.Replace('"', '');
            formattedData.AppendLine();
            File.WriteAllText(@"C:'test'MyFile.csv", formattedData.ToString());
        }

谢谢

C# 字符串生成器替换为 null 值

.替换可以接受字符串,而空字符串是有效的,所以只需转义双引号

formattedData.Replace("'"", "");

值得记住的是,您的代码行被逗号分割

string[] lineItems = fileLine.Split(new char[1] { ',' });

将产生拆分任何带有逗号的字符串的不良效果。双引号的全部意义在于隔离逗号,以便该列可以包含逗号。例如

name,address,phone
"Joe","22 acacia avenue, mean street, LA","555-1234"

您的代码会将这一行拆分为五个值,而不是预期的三个值。您实际上应该使用专用的CSV解析器。

字符文本需要恰好是一个字符。 string是零个或多个字符的序列。 您需要一个没有字符的字符串,因为不能有一个不表示字符的字符。

还有另一个 Replace 重载,它接受字符串而不是字符作为其参数。

附带说明一下,CSV 文件可以使用另一个引号转义字段值内的引号,因此如果您的字段值是:This is my "Value"您可以将其写为This is my ""Value"",它将被正确解释。 如果您可以完全删除引号,那很好,只要知道有一个定义的情况来说明如何在不违反语法的情况下实际保留引号。

没有空字符这样的东西。你能得到的最接近的是''0',Unicode"空"字符。但是你为什么不使用string呢?您需要用'来逃避"

formattedData.Replace("'"", "");