web-dev-qa-db-ja.com

文字列から二重引用符を削除したい

二重引用符の削除に関する質問がいくつかありました。しかし、それは私の問題を解決しませんでした。彼らは、置換またはトリム機能を使用するように言いました。使用しましたが、問題は解決しません。

私のコード:

_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();を使用してみました。ただし、二重引用符はそのままです。解決策を教えてください。ありがとう。

13
user1537319

rowStringに割り当てる必要があります。

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

Strings are immutable

row.String.Replace(...)は文字列を返します。何も割り当てていないため、破棄されます。元のrowStringオブジェクトは変更されません。

String.Emptyまたは""を使用して、単一引用符' 'の代わりに二重引用符を空の文字列に置き換えることができます。したがって、ステートメントは次のようになります。

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

二重引用符を文字列として渡すことを忘れないでください"\""、文字列によるメソッドのオーバーロード。パラメータは両方とも文字列型です)。

文字列の先頭または末尾のstring.Replaceの間に追加されたスペースを削除しようとした場合、末尾のTrim()が削除される可能性があります。

34
Habib

Trimは、空白だけでなく、任意の文字を削除できます。

myString = myString.Trim('"');

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

17
pants

あなたの問題はよくある間違いです。これはあなたがする必要があることです:

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

必ず結果を変数に返しますrowString =)。これを行わない場合でも、C#はメソッドを実行しますが、変数を変更しません。これは、不変オブジェクトの場合です。

例:

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

実際のrowStringオブジェクトを変更します変更しません

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

rowStringの古い値を右側のコードの結果で置き換えます。

私はこの回答を書いて、ハビブが上記とまったく同じことを説明していることに気づきました。 :)

1
Chris H

Trim()を使用して、空白、一重引用符、二重引用符の任意の組み合わせを同時に削除できます。

rowString.Trim('"', '\'', ' ')
0
Jpsy

この行にはエラーが含まれています。

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

Replaceとtrimはどちらも文字列を返すので、これを変数に割り当てる必要があります。文字列を割り当てないことにより、replaceおよびtrimメソッドによって生成された値が失われます。

var myString = rowString.Replace('"', ' ').Trim(); 
//Or
rowString = rowString.Replace('"', ' ').Trim(); 
0
Jonas W

VBでは、これを試す必要があります:

Replace("""", "");

しかし、C#ではこれを試す必要があります。

Replace("\"", "");

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

rowString=rowString.Replace('"', ' ').Trim()    
or
var somestring=rowString.Replace('"', ' ').Trim()
0
Prabhu Murthy

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

したがって、置き換えられた文字列を割り当てて、希望する動作を実現してみてください。

0
Dhanasekar