2013-07-26 17 views
6

C#プロジェクトにいくつかのファイル拡張子があり、ファイル名から削除する必要があります。C#で特定の部分文字列を削除する方法

これまでのところ、サブストリングがファイル名に含まれているかどうかを確認できます。

if (stringValue.Contains(anotherStringValue)) 
{ 
    // Do Something // 
} 

はそう言う stringValuetest.asmであれば、それは私が何とか stringValueから .asmを削除したい、 .asmが含まれています。

どうすればいいですか?

+0

を文字列値は 'helloworld'であり、あなたが削除したい場合はどのような「l」。一致するすべての文字列が削除され、出力は 'heoword'でしょうか? –

+0

あなたは 'EndsWith("。asm ")'を使うべきです(または[Path.GetExtension](http://msdn.microsoft.com/en-us/library/system.io.path.getextension.aspx)を使います) "filename.asmo.doc"( 'Contains'はここで偽陽性を返します)のコーナーケースを避けてください。 –

答えて

7

あなたはPathライブラリと結合された「ブラックリスト」アプローチをしたい場合:処理さ

// list of extensions you want removed 
String[] badExtensions = new[]{ ".asm" }; 

// original filename 
String filename = "test.asm"; 

// test if the filename has a bad extension 
if (badExtensions.Contains(Path.GetExtension(filename).ToLower())){ 
    // it does, so remove it 
    filename = Path.GetFileNameWithoutExtension(filename); 
} 

例:

test.asm  = test 
image.jpg  = image.jpg 
foo.asm.cs  = foo.asm.cs <-- Note: .Contains() & .Replace() would fail 
+0

これは、これを処理するための最もクリーンで最善の方法であると感じられ、さらに拡張機能のために簡単に追加できます。ありがとうございました! – Annabelle

6

)(場合の必要は、ちょうど使用:

stringValue = stringValue.Replace(anotherStringValue,""); 

anotherStringValue場合はstringValue内で発見されていない場合、変更は行われません。

+2

これを強くお勧めします。拡張子だけでなく_all_オカレンスを削除します。 –

+1

少なくとも、私は 'EndsWith(anotherStringValue)'をチェックし、 'stringValue.SubString(0、stringValue.Length - anotherStringValue.Length)'を使用します。 –

7

Path.GetFileNameWithoutExtension(filepath)を使用してください。

if (Path.GetExtension(stringValue) == anotherStringValue) 
{ 
    stringValue = Path.GetFileNameWithoutExtension(stringValue); 
} 
+4

'anotherStringValue'が文字列のどこにあっても、それは拡張ではありません。 –

+1

コメントありがとうございました。あなたが正しいです。私はコードを編集しました – Vasiliy

+2

おそらく '.ToLower()'や 'String.Compare'を無感性フラグで使い、CasEの問題を回避したいと考えています。 –

3

のみを取り払うことへのもう一つのワンライナーのアプローチを".asm"は最後にあり、文字列の中央には "asm"がありません。

stringValue = System.Text.RegularExpressions.Regex.Replace(stringValue,".asm$",""); 

"$"は文字列の最後に一致します。

「.ASM」または「.ASM」または任意のequivlanetにマッチするためには、さらにケースを無視するRegex.Replaceを指定することができます。

using System.Text.RegularExpresions; 
... 
stringValue = Regex.Replace(stringValue,".asm$","",RegexOptions.IgnoreCase); 
関連する問題