Проверьте, заканчивается ли строка NSString строкой - PullRequest
1 голос
/ 02 января 2012

Я хотел бы проверить, заканчивается ли моя строка NSSt @ 2x.png (без учета регистра).Как я могу это сделать?

У меня есть этот код сейчас, но он, кажется, игнорирует часть @ 2x.

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

2012-01-01 21: 00: 55.600NewApp [23930: 707] Имя файла: myfile@2x.png

Ответы [ 4 ]

7 голосов
/ 02 января 2012

Попробуйте что-то вроде этого:

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 голос
/ 02 января 2012

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

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

fileName = [fileName stringByReplacingOccurrencesOfString:@"@2x" withString:2"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, fileName.length)];
1 голос
/ 02 января 2012

у вас есть строка NSString, поэтому вы не можете изменить содержимое строки.stringByReplacingOccurferencesOfString возвращает измененную строку, но НЕ ИЗМЕНЯЕТ строку fileName.

Вам нужно что-то вроде этого:

fileName = [fileName stringByReplacingOccurrencesOfString:@"@2x" withString:@""];
fileName = [fileName stringByReplacingOccurrencesOfString:@"@2X" withString:@""];
NSLog(@"Filename: %@", fileName);
0 голосов
/ 02 января 2012

Вам необходимо переназначить вашу переменную, потому что NSString является неизменным (состояние не может быть изменено).Попробуйте:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...