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 でオーバーロードすると、両方のパラメーターが string 型である必要があるため、二重引用符を string として渡すことを忘れないでください)。 "\""

文字列の先頭または末尾に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 の両方が文字列を返すため、これを変数に割り当てる必要があります。文字列を割り当てないと、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

Habib が述べたように、文字列は不変です。すべての文字列操作は、Replace、Reverse などの操作されたデータで戻す必要があります....

したがって、置換された文字列を割り当てて、目的の動作を実現してみてください。

于 2012-10-08T09:21:30.387 に答える
0

rowString.Replace('"', ' ')新しい文字列オブジェクトを作成し、既存の文字列オブジェクトを変更しないため、新しく作成した文字列オブジェクトを別の変数に割り当てるか、既存の変数を上書きする必要があります。

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