我想检查一个字符串是否有某个后缀,但想做一个不区分大小写的检查。我需要一个替代方案:
if ([selectedFile hasSuffix:@"jpg"] ||
[selectedFile hasSuffix:@"JPG"])
或JPG,JPG,JPG。有没有什么捷径可以做到这一点?我不知道我如何caseInsensitiveCompare:
在这种情况下申请。
我想检查一个字符串是否有某个后缀,但想做一个不区分大小写的检查。我需要一个替代方案:
if ([selectedFile hasSuffix:@"jpg"] ||
[selectedFile hasSuffix:@"JPG"])
或JPG,JPG,JPG。有没有什么捷径可以做到这一点?我不知道我如何caseInsensitiveCompare:
在这种情况下申请。
[[selectedFile lowercaseString] hasSuffix:@"jpg"]
如果selectedFile
是文件名,最好查看整个扩展名。您不太可能但可能会找到一个名为ThisIsNotAnImage.asdfjpg的文件。如果你只检查后缀,你会错误地断定这是一张图片。
幸运的是NSString
,有许多处理路径的方法,包括pathExtension
.
此外,您是否希望始终且仅接受 JPEG 图像,或者您可以加载的所有图像?大多数 Apple 的图像类都支持一系列令人印象深刻的文件格式。
如果您正在为 iOS 编写代码,则UIImage 类参考UIImage
中列出了被识别的图像格式,以及它们的扩展名。
如果您正在为 Mac OS 编写,NSImage
则有一个名为 的类方法imageFileTypes
,允许在运行时更改支持的格式。
如UIImage 类参考中所述,JPEG 文件有时具有扩展名.jpeg。如果您手动查找 JPEG,则应同时检查.jpg和.jpeg。
NSString *extension = [selectedFile pathExtension];
BOOL isJpegImage =
(([extension caseInsensitiveCompare:@"jpg"] == NSOrderedSame) ||
([extension caseInsensitiveCompare:@"jpeg"] == NSOrderedSame));
if (isJpegImage)
{
// Do image things here.
}
NSString *loweredExtension = [[selectedFile pathExtension] lowercaseString];
// Valid extensions may change. Check the UIImage class reference for the most up to date list.
NSSet *validImageExtensions = [NSSet setWithObjects:@"tif", @"tiff", @"jpg", @"jpeg", @"gif", @"png", @"bmp", @"bmpf", @"ico", @"cur", @"xbm", nil];
if ([validImageExtensions containsObject:loweredExtension])
{
// Do image things here.
}
NSString *loweredExtension = [[selectedFile pathExtension] lowercaseString];
NSSet *validImageExtensions = [NSSet setWithArray:[NSImage imageFileTypes]];
if ([validImageExtensions containsObject:loweredExtension])
{
// Do image things here.
}
mipadi 的建议是最好的,但既然你提到caseInsensitiveCompare:
了,这就是你将如何使用它:
BOOL hasSuffix = (NSOrderedSame == [[selectedFile substringFromIndex:[selectedFile length] - 3]] caseInsensitiveCompare:@"JPG"]);
那是一口!
你也可以使用rangeOfString:options:
,传递你的后缀和NSCaseInsensitiveSearch
.