检查NSString是否以字符串结尾

时间:2012-01-01 20:05:41

标签: objective-c cocoa nsstring

我想检查我的NSString是否以@ 2x.png结尾(不区分大小写)。我怎么能这样做?

我现在有这个代码,但似乎忽略了@ 2x部分。

    NSString *fileName = [_sourcePath lastPathComponent];
    [fileName stringByReplacingOccurrencesOfString:@"@2x" withString:@""];
    [fileName stringByReplacingOccurrencesOfString:@"@2X" withString:@""];
    NSLog(@"Filename: %@", fileName);
  

2012-01-01 21:00:55.600 NewApp [23930:707]文件名:myfile@2x.png

5 个答案:

答案 0 :(得分:7)

尝试这样的事情:

NSRange range = [fileName rangeOfString:@"@2x.png" options:NSCaseInsensitiveSearch];

if ( range.location != NSNotFound &&
     range.location + range.length == [fileName length] )
{
    NSLog(@"%@ ends with @2x.png",fileName);
}

PS。请注意,在调用fileName之前,您应该确保nil不是rangeOfString,因为您正在调用一个不返回id的方法。在nil上调用方法会返回与nil类型不兼容的NSRange,并会导致意外结果。

答案 1 :(得分:1)

你有一个NSString,所以你不能改变字符串的内容。 stringByReplacingOccurrencesOfString返回修改后的字符串但IS NOT CHANGING fileName字符串。

你需要这样的东西:

fileName = [fileName stringByReplacingOccurrencesOfString:@"@2x" withString:@""];
fileName = [fileName stringByReplacingOccurrencesOfString:@"@2X" withString:@""];
NSLog(@"Filename: %@", fileName);

答案 2 :(得分:1)

如其他答案中所述,您需要将结果重新分配给您的变量(或者,使用-mutableCopy创建可变字符串并使用NSMutableString中的替换方法。)

要做一个不区分大小写的替换,有一个相同方法的第二个实现,还有一些参数:

fileName = [fileName stringByReplacingOccurrencesOfString:@"@2x" withString:2"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, fileName.length)];

答案 3 :(得分:1)

旧线程,但是它没有最新的方法来检查 NSString是否以字符串结尾(根据标题):

[fileName hasSuffix:@"@2x"];

或不区分大小写:

[[fileName lowercased] hasSuffix:@"@2x"];

答案 4 :(得分:0)

您需要重新分配您的变量,因为NSString是不可变的(状态不能是modifieid)。尝试:

NSString *fileName = [_sourcePath lastPathComponent];
fileName = [fileName stringByReplacingOccurrencesOfString:@"2x" withString:@""];
fileName = [fileName stringByReplacingOccurrencesOfString:@"2X" withString:@""];
NSLog(@"Filename: %@", fileName);

或者,如果您想要内联替换,请使用NSMutableStringreplaceOccurrencesOfString:withString:options:range来替换内联。