C#Stringbuilder替换为空值

时间:2015-01-07 15:21:16

标签: c# stringbuilder character-replacement

我试图使用Stringbuilder为我构建一个csv文件,我使用的文件中的一些字段有双引号。 我有这个代码你可以看到我试图使用.replace删除"并替换为nothing,这会抛出一个空的char文字错误。是否有一种更简单的方法来删除所有双引号`

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());
        }

谢谢

3 个答案:

答案 0 :(得分:3)

字符文字必须是一个字符。 string是零个或多个字符的序列。你想要一个没有字符的字符串,因为你不能有一个不代表任何字符的字符。

Replace的另一个重载是接受字符串而不是字符的参数。

另外,CSV文件可以使用其他引号来转义字段值内的引号,因此,如果您的字段值为:This is my "Value",则可以将其写为This is my ""Value""并且它将被正确解释。如果你在你的情况下完全删除引号就好了,只要知道如何在不违反语法的情况下实际保留引号的定义案例。

答案 1 :(得分:3)

.Replace可以接受一个字符串,一个空字符串是有效的,所以只需要转义双引号

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

值得记住的是,用逗号分隔的代码行

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

会产生不希望的效果,即用逗号分隔任何字符串。双引号的重点是隔离逗号,以便列可以包含逗号。例如

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

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

答案 2 :(得分:1)

没有空的char。您可以得到的最接近的是'\0',即Unicode“null”字符。 但是你为什么不使用string?您需要使用"转义\

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