检查NSString是否以字符串结尾

问题描述 投票:1回答:5

我想检查我的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]文件名:[email protected]

objective-c cocoa nsstring
5个回答
0
投票

您需要重新分配变量,因为NSString是不可变的(状态无法修改)。试试:

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

或者,如果要进行内联替换,请使用NSMutableStringreplaceOccurrencesOfString:withString:options:range进行内联替换。


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
投票

您有一个NSString,所以您不能更改字符串的内容。 stringByReplacingOccurrencesOfString返回修改后的字符串,但不会更改fileName字符串。

您需要这样的东西:

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

1
投票

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

要进行不区分大小写的替换,该方法的第二种实现带有更多参数:

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

0
投票

旧线程,但是它没有最新的检查方法[[如果NSString以字符串结尾

© www.soinside.com 2019 - 2024. All rights reserved.