我想检查我的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
答案 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);
或者,如果您想要内联替换,请使用NSMutableString
和replaceOccurrencesOfString:withString:options:range
来替换内联。