2012-01-01 2 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); 

В качестве альтернативы, если вы хотите сделать Замены инлайн Использовать NSMutableString и replaceOccurrencesOfString:withString:options:range который будет делать замену инлайн.

+0

Я должен был знать, что. Его в док ... просто пропустили. Теперь он изменился вместе с предложением @mvds. –

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); 
} 

пс. Обратите внимание, что вы должны убедиться, что fileName не nil перед вызовом rangeOfString, так как вы вызываете метод, который не возвращает id. Вызов метода на nil возвращает nil, что несовместимо с типом NSRange и приведет к неожиданным результатам.

1

Как уже упоминалось в других ответах, вам нужно повторно назначить результат своей переменной (или, альтернативно, создать изменяемую строку с -mutableCopy и использовать методы замены в NSMutableString).

Для регистрозависимости замены, есть вторая реализация одного и того же метода с еще несколько аргументов:

fileName = [fileName stringByReplacingOccurrencesOfString:@"@2x" withString:2"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, fileName.length)]; 
Смежные вопросы