私は文字列を持っています:
var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";
に置き換えようとして\\
い\
ます。
私はこれを試しました:
path = path.Replace("\\\\", "\\");
path = path.Replace(@"\\", @"\");
二重のバックスラッシュを単一のバックスラッシュに置き換えるものはありません。
にはpath
二重のバックスラッシュは含まれていません。"blah\\blah"
は実際にblah\blah
。
通常の文字列リテラル (で始まらないもの@
) では、一部の文字の前にバックスラッシュ ( ) を付けてエスケープする必要があり\
ます。これらの文字の 1 つはバックスラッシュそのものであるため、1 つのバックスラッシュを文字列に入れたい場合は、別のバックスラッシュでエスケープします。これが、path
二重のバックスラッシュがすべて含まれている理由です。実行時には、これらは 1 つのバックスラッシュになります。
利用可能なエスケープ シーケンスについては、こちらを参照してください: C# FAQ: エスケープ シーケンス
一方、逐語的文字列 (で始まるもの@
) では、これらの文字のほとんどをエスケープする必要はありません。@"\"
実際にそうです\
。逐語的な文字列でエスケープする必要がある唯一の文字は引用符です。これを行うには、二重引用符を入力するだけです。@""""
実際そうです"
。
d:\project\Bloomberg\trunk\UI.Demo\
したがって、文字列に入れたい場合は、2 つの可能性があります。
\
通常の文字列リテラル (エスケープ されていることに注意してください):
var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";
または逐語的な文字列リテラル (エスケープする必要はありません\
):
var path = @"d:\project\Bloomberg\trunk\UI.Demo\";
@を入れるのを忘れないでください?あなたのチェーンの前は言った?
var path = @"d:\\project\\Bloomberg\\trunk\\UI.Demo\\";
しかし、それは-> @ "d:\ project \ Bloomberg \ trunk \ UI.Demo \";
はegal->"d:/project/Bloomberg/trunk/UI.Demo/";
この文字列の\\
エスケープは次の\
とおりです。
var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";
したがって、これは実際には次のように述べています。
@"d:\project\Bloomberg\trunk\UI.Demo\"
したがって、と置き換える\\
と\
、何も置き換えられません。\\\\
二重スラッシュは、通常の文字列のように見えます。replace メソッドで正しく実行したこと。
変化する:
var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";
に:
var path = @"d:\\project\\Bloomberg\\trunk\\UI.Demo\\";
そしてあなたは良いでしょう。これは通常の文字列を\\
意味する\
ので、実際に二重のバックスラッシュが必要な場合\\\\
は、Replace の呼び出しと同じように、@ を使用するか、文字列の前に付ける必要があります。
\\
第二に、文字列の前に @ が付いておらず、エスケープ シーケンスが評価されるため、実際に表示されるものは単一のバックスラッシュであるため、特定の状況で Replace を呼び出す必要はおそらくないでしょう。