2012-01-01 60 views
1

我想檢查我的NSString是否以@ 2x.png結尾(不區分大小寫)。我怎樣才能做到這一點?檢查NSString是否以字符串結尾

我現在有這個代碼,但它似乎忽略@ 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]

回答

0

您需要重新分配您的變量,因爲的NSString是不變的(狀態不能modifieid)。嘗試:

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

或者,如果你想要做的替代品在線使用NSMutableStringreplaceOccurrencesOfString:withString:options:range這將做更換直列。

+0

我應該知道這一點。它在文檔中......錯過了它。現在將其與@mvds建議一起更改。 – 2012-01-01 20:20:28

1

你有一個NSString的,所以你不能改變內容的字符串。 stringByReplacingOccurrencesOfString返回修改後的字符串,但不改變fileName字符串。

你需要的東西是這樣的:

fileName = [fileName stringByReplacingOccurrencesOfString:@"@2x" withString:@""]; 
fileName = [fileName stringByReplacingOccurrencesOfString:@"@2X" withString:@""]; 
NSLog(@"Filename: %@", fileName); 
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。請注意,在致電rangeOfString之前,請確保fileName不是nil,因爲您調用的方法不會返回id。調用nil上的方法返回nil,這與NSRange類型不兼容,並且會導致意外的結果。

1

正如其他答案中所提到的,您需要將結果重新分配給您的變量(或者,使用-mutableCopy創建可變字符串並使用NSMutableString中的替換方法)。

要做到不區分大小寫的替代,還有第二個實現多帶幾個參數相同的方法:

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