objective-c中的字符串搜索
给定如下字符串:objective-c中的字符串搜索,objective-c,string,parsing,nsstring,Objective C,String,Parsing,Nsstring,给定如下字符串: http://files.domain.com/8aa55fc4-3015-400e-80f5-390997b43cf9/c07cb0d2-b7d7-4bfd-b0c3-6f43571e3c29-MyFile.jpg 我需要找到字符串“MyFile”,并告诉它是什么类型的图像(.jpg或.png)。我怎样才能做到这一点 我唯一能想到的是向后搜索前四个字符以获得文件扩展名,然后继续向后搜索,直到找到第一个连字符,并假设文件名本身没有任何连字符。但我不知道怎么做。有更好的方法吗?
http://files.domain.com/8aa55fc4-3015-400e-80f5-390997b43cf9/c07cb0d2-b7d7-4bfd-b0c3-6f43571e3c29-MyFile.jpg
我需要找到字符串“MyFile”,并告诉它是什么类型的图像(.jpg或.png)。我怎样才能做到这一点
我唯一能想到的是向后搜索前四个字符以获得文件扩展名,然后继续向后搜索,直到找到第一个连字符,并假设文件名本身没有任何连字符。但我不知道怎么做。有更好的方法吗?
[myString lastPathComponent]
将获取文件名。
[myString路径扩展]
将获得扩展名
要获得文件名的后缀,我认为您必须进行自己的解析。它总是在最后一个破折号之后和分机之前的字符串吗
如果是这样,这里有一个想法:
- (NSString *)lastLittleBitOfTheFilenameFrom:(NSString *)filename {
NSInteger fnStart = [filename rangeOfString:@"-" options:NSBackwardsSearch].location + 1;
NSInteger fnEnd = [filename rangeOfString:@"." options:NSBackwardsSearch].location;
// might need some error checks here depending on what you expect in the original url
NSInteger length = fnEnd - fnStart;
return [filename substringWithRange:NSMakeRange(fnStart, length)];
}
或者,多亏了@Chuck
// even more sensitive to unexpected input, but nice and tiny ...
- (NSString *)lastLittleBitOfTheFilenameFrom:(NSString *)filename {
NSString *nameExt = [[filename componentsSeparatedByString:@"-"] lastObject];
return [[nameExt componentsSeparatedByString:@"."] objectAtIndex:0];
}
[myString lastPathComponent]
将获取文件名。
[myString路径扩展]
将获得扩展名
要获得文件名的后缀,我认为您必须进行自己的解析。它总是在最后一个破折号之后和分机之前的字符串吗
如果是这样,这里有一个想法:
- (NSString *)lastLittleBitOfTheFilenameFrom:(NSString *)filename {
NSInteger fnStart = [filename rangeOfString:@"-" options:NSBackwardsSearch].location + 1;
NSInteger fnEnd = [filename rangeOfString:@"." options:NSBackwardsSearch].location;
// might need some error checks here depending on what you expect in the original url
NSInteger length = fnEnd - fnStart;
return [filename substringWithRange:NSMakeRange(fnStart, length)];
}
或者,多亏了@Chuck
// even more sensitive to unexpected input, but nice and tiny ...
- (NSString *)lastLittleBitOfTheFilenameFrom:(NSString *)filename {
NSString *nameExt = [[filename componentsSeparatedByString:@"-"] lastObject];
return [[nameExt componentsSeparatedByString:@"."] objectAtIndex:0];
}
如果NSString对象中有该字符串,或者从该字符串创建该字符串,则可以使用rangeOfString方法来完成这两个操作
有关更多详细信息,请参阅 如果NSString对象中有该字符串,或者从该字符串创建该字符串,则可以使用rangeOfString方法同时完成这两个操作 有关更多详细信息,请参阅 用于搜索文件名。搜索模式实际上取决于您对文件名的了解。如果MyFile之前的“随机”数字和字符具有已知的格式,您可以将其考虑在内。我下面的建议假设文件名不包含任何减号
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:@"-([:alnum:]*)\\.(jpg|png)$"
options:NSRegularExpressionSearch
error:nil];
// Get the match between the first brackets.
NSTextCheckingResult *match = [regex firstMatchInString:string options:0
range:NSMakeRange(0, [string length])];
NSRange matchRange = [match rangeAtIndex:1];
NSString *fileName = [string substringWithRange:matchRange];
NSLog(@"Filename: %@", fileName);
// Get the extension with a simple NSString method.
NSString *extension = [string pathExtension];
NSLog(@"Extension: %@", extension);
用于搜索文件名。搜索模式实际上取决于您对文件名的了解。如果MyFile之前的“随机”数字和字符具有已知的格式,您可以将其考虑在内。我下面的建议假设文件名不包含任何减号
NSRegularExpression *regex = [NSRegularExpression
regularExpressionWithPattern:@"-([:alnum:]*)\\.(jpg|png)$"
options:NSRegularExpressionSearch
error:nil];
// Get the match between the first brackets.
NSTextCheckingResult *match = [regex firstMatchInString:string options:0
range:NSMakeRange(0, [string length])];
NSRange matchRange = [match rangeAtIndex:1];
NSString *fileName = [string substringWithRange:matchRange];
NSLog(@"Filename: %@", fileName);
// Get the extension with a simple NSString method.
NSString *extension = [string pathExtension];
NSLog(@"Extension: %@", extension);
[string pathExtension]
-对于扩展,您是否尝试过阅读NSString的规范?这里有很多函数可以使用。[string path extension]
-对于扩展,您是否尝试过阅读NSString的规范?这里有很多函数可以使用。就我个人而言,我只需要做[[filename componentsSeparatedByString:@“-“]lastObject]
。但我很懒,这是个好主意。不过,我认为我们仍然需要切断那个分机。可以执行另一个由字符串@“.”分隔的组件,然后获取objectAtIndex:0。这很可爱。NSRangeMake抛出“函数‘NSRangeMake’的隐式声明在C99中无效。但使用Chucks的解决方案结合lastPathComponent似乎可行。是的。对不起。它是NSMakerRange。这一个结构布局函数不遵循苹果的标准模式。将进行编辑。其余的应该可以。就我个人而言,我只需执行[[filename ComponentSeparatedByString:@“-“]lastObject]
。但我很懒。这是一个好主意。不过,我认为我们仍然需要删除该扩展名。可以执行另一个ComponentSeparatedByString:@.”,然后获取objectAtIndex:0。这很可爱。NSRangeMake抛出函数“NSRangeMake”的隐式声明在C99中无效。但使用Chucks的解决方案与lastPathComponent组合似乎有效。是的。抱歉。它是NSMakerRange。此结构布局函数不遵循apple的标准模式。将进行编辑。其余的应该可以工作。搜索@(MyFile)\\(jpg;png)$可能更好
。更精确一点。这只适用于名为“MyFile”的文件,对吗?它可以是任何不包含连字符的名称。可能最好搜索@-(MyFile)\\(jpg | png)$”
。更精确一点。这只适用于名为“MyFile”的文件,但对吗?它可以是任何不包含连字符的名称。