16

我在这里看到了一些与删除双引号有关的问题。但这并没有解决我的问题。他们告诉使用替换或修剪功能。我用过,但问题仍然存在。

我的代码:

DataTable dt = TypeConveriontHelper.ConvretExcelToDataTable(SourceAppFilePath);
        string targetPath = BatchFolderPath + @"\" + "TRANSACT.INX";
        StreamWriter wrtr = null;
        wrtr = new StreamWriter(targetPath);
        for (int x = 0; x < dt.Rows.Count; x++)
        {
            string rowString = "";
            for (int y = 0; y < dt.Columns.Count; y++)
            {
                if (y == dt.Columns.Count - 1)
                {
                    rowString += "\"" + dt.Rows[x][y].ToString() + "\"";
                }
                else
                {
                    rowString += "\"" + dt.Rows[x][y].ToString() + "\"~";
                }
            }           
            rowString.Replace('"', ' ').Trim();
            wrtr.WriteLine(rowString);
        }
        wrtr.Close();
        wrtr.Dispose();

我尝试rowString.Replace('"', ' ').Trim();在上面的代码中使用。但是双引号按原样存在。给我一个解决方案。谢谢。

4

8 回答 8

38

您需要将其分配回rowString

rowString = rowString.Replace('"', ' ').Trim();

字符串不可变的。

row.String.Replace(...)将返回一个字符串,因为您没有为它分配任何它会被丢弃的东西。它不会改变原始rowString对象。

您可以使用String.Empty""用空字符串替换双引号,而不是单个空格' '。所以你的陈述应该是:

rowString = rowString.Replace("\"", string.Empty).Trim();

(记住将双引号作为字符串 "\""传递,因为使用 string.Empty 的方法重载将要求两个参数都是字符串类型)。

Trim()如果您试图删除string.Replace在字符串开头或结尾添加的空格,您可能会在末尾删除。

于 2012-10-05T06:12:12.567 回答
22

Trim 可以删除任何字符,而不仅仅是空格。

myString = myString.Trim('"');

http://msdn.microsoft.com/en-us/library/d4tt83f9%28v=vs.110%29.aspx

于 2013-12-05T16:32:20.983 回答
1

你的问题是一个常见的错误。这是您需要做的:

rowString = rowString.Replace('"', ' ').Trim();

确保将结果返回到变量( rowString =)。如果您不这样做,C# 仍将运行这些方法,但不会修改变量。任何不可变对象都是这种情况。

例子:

rowString.Replace('"', ' ').Trim();

不会修改实际rowString对象。

rowString = rowString.Replace('"', ' ').Trim();

rowString用右边代码的结果替换旧值。

我写了这个答案,然后才意识到 Habib 解释了上面完全相同的事情。:)

于 2015-10-13T23:33:11.473 回答
0

此行包含错误。

rowString.Replace('"', ' ').Trim(); 

由于替换和修剪都返回一个字符串,因此您需要将其分配给一个变量。通过不分配字符串,您将丢失由 replace 和 trim 方法生成的值。

var myString = rowString.Replace('"', ' ').Trim(); 
//Or
rowString = rowString.Replace('"', ' ').Trim(); 
于 2012-10-05T06:15:13.430 回答
0

在 VB 中你必须试试这个:

Replace("""", "");

但是在 C# 中你必须试试这个:

Replace("\"", "");
于 2012-10-05T06:15:26.413 回答
0

rowString.Replace('"', ' ')创建一个新的字符串对象并且不修改现有的字符串对象。因此您必须将新创建的字符串对象分配给不同的变量或覆盖现有的变量。

rowString=rowString.Replace('"', ' ').Trim()    
or
var somestring=rowString.Replace('"', ' ').Trim()
于 2012-10-05T06:18:17.483 回答
0

正如 Habib 提到的,字符串是不可变的。任何字符串操作都需要使用替换、反向等操作数据进行设置。

因此,请尝试分配替换的字符串以实现您想要的行为。

于 2012-10-08T09:21:30.387 回答
0

您可以使用Trim()同时删除空格、单引号和双引号的任意组合:

rowString.Trim('"', '\'', ' ')
于 2019-11-14T16:37:52.127 回答