我有一些C#项目中的文件扩展名,如果它们存在于文件名中,我需要将它们从文件名中删除。
目前我知道我可以检查一个子字符串是否在文件名中。
if (stringValue.Contains(anotherStringValue))
{
// Do Something //
}
所以如果说
stringValue
是 test.asm
,然后它包含 .asm
,我想从 stringValue
中删除 .asm
。如何做到这一点?if (Path.GetExtension(stringValue) == anotherStringValue)
{
stringValue = Path.GetFileNameWithoutExtension(stringValue);
}
anotherStringValue
存在于字符串中的任何位置,即使它不是扩展名,也会导致误判。 - Chris Sinclair.ToLower()
或带有不区分大小写标志的String.Compare
来避免任何大小写问题。 - Brad Christie如果你想使用“黑名单”方法并配合 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
stringValue = stringValue.Replace(anotherStringValue,"");
stringValue
中没有找到 anotherStringValue
,则不会发生任何更改。EndsWith(anotherStringValue)
并使用 stringValue.SubString(0, stringValue.Length - anotherStringValue.Length)
。 - Brad Christie另一种一行代码的方法,只删除字符串末尾的".asm"而不删除字符串中间的任何"asm":
stringValue = System.Text.RegularExpressions.Regex.Replace(stringValue,".asm$","");
using System.Text.RegularExpresions;
...
stringValue = Regex.Replace(stringValue,".asm$","",RegexOptions.IgnoreCase);
helloworld
,你想要移除l
,那么它是否意味着会移除所有匹配的字符串,输出结果将是heoword
? - John WooEndsWith(".asm")
(或使用 Path.GetExtension)来避免像 "filename.asmo.doc" 这样的边角情况(Contains
在这里会返回错误的结果)。 - Chris Sinclair