Как заменить символ, который существует независимо, а не другими символами в строке NSString? - PullRequest
0 голосов
/ 13 апреля 2011

Хорошо, давайте предположим, что у меня есть эта строка:

R RATS ARE FAR

Я хочу заменить независимый R на X, чтобы сделать:

X RATS ARE FAR

Я пробовал stringByReplacingOccurferencesOfStringно это заменяет все R на X.Один из способов сделать это - проверить, есть ли пробел до и после буквы, что означало бы его независимость, а затем перейти к уничтожению, но этот подход кажется таким неудачным.Также строка является динамической, как и позиция R.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2011

Я предполагаю, что слова могут быть заключены в любой не буквенно-цифровой символ, верно? (В противном случае вы просто замените @ "R" на "X", плюс особые случаи для вхождений / трейлингов)


Один из способов сделать это - использовать RegexKitLite '

[string replaceOccurrencesOfRegex:@"\bR\b" withString:@"X"];

(\b обозначает слово * b * границы в регулярных выражениях в стиле PCRE)


А затем есть CFStringTokenizer (поиск связанной документации для kCFStringTokenizerUnitWordBoundary), который может помочь, в качестве альтернативы.

1 голос
/ 13 апреля 2011

Я бы сделал это так:

NSString *statement = @"R RATS ARE FAR";
statement = [statement stringByReplacingOccurrencesOfString:@" R " withString:@" X "];
// now check if the string starts with R + space
if ([statement hasPrefix:@"R "])
    statement = [statement stringByReplacingOccurrencesOfString:@"R " withString:@"X " options:0 range:NSMakeRange(0,2)];
// now check the end
if ([statement hasSuffix:@" R"])
   statement = [statement stringByReplacingOccurrencesOfString:@" R" withString:@" X" options:0 range:NSMakeRange([statement length] - 2, 2)];

И если вы планируете много замены в этой строке, вы должны использовать NSMutableString.

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