Как выполнить поиск в обратном направлении, чтобы найти 2-й пробел / пробел и заменить его другой строкой? - PullRequest
4 голосов
/ 23 декабря 2010

это снова я.Я задал вопрос, похожий на этот, только что, но этот вопрос немного сложнее.Я планировал использовать RegexKitLite, чтобы сделать то, что мне нужно, но я верю, что это можно сделать без него.У меня есть строка NSString, в которой есть некоторые слова с пробелами / пробелами, и я хочу получить самый последний пробел в строке слева от последнего слова.Пример строки ниже:

NSString *string = @"Here is an example string HELLO ";

Как видно из строки выше, в самом конце строки есть пробел / пробел.Я хочу иметь возможность получить пробел слева от HELLO и заменить его своим собственным текстом / строкой.Я работаю над использованием NSBackwardsSearch от NSString, но он не работает.

NSString *spaceReplacement = @"text that i want";
    NSString *replaced = [snipet [string rangeOfString:substring options:NSBackwardsSearch].location:@" " withString:spaceReplacement];
    NSLog(@"%@", replaced);

Любая помощь поможет, я просто устала пытаться исправить это, это сводит меня с ума.Я думал, что смогу сделать это с RegexKitLite, но кривая обучения для этого слишком крута для меня, учитывая мой таймфрейм, с которым я работаю.Я рад, что Джейкоб Р. предложил мне использовать методы NSString: -)

Ответы [ 3 ]

17 голосов
/ 23 декабря 2010

В этом решении предполагается, что у вас всегда есть пробел в конце строки ... он должен конвертировать

Вот пример строки HELLO

...to:

Вот пример строкового текста, который я хочуHELLO

... так как я понял, что вы хотели это сделать.

Вот код:

NSString *string = @"Here is an example string HELLO ";

NSRange rangeToSearch = NSMakeRange(0, [string length] - 1); // get a range without the space character
NSRange rangeOfSecondToLastSpace = [string rangeOfString:@" " options:NSBackwardsSearch range:rangeToSearch];

NSString *spaceReplacement = @"text that i want";
NSString *result = [string stringByReplacingCharactersInRange:rangeOfSecondToLastSpace withString:spaceReplacement];

Хитрость заключается в использовании метода [NSString rangeOfString:options:range:].

Примечание. Если строка не всегда содержит пробел в конце, этот код, вероятно, завершится ошибкой, ивам нужен код, который немного сложнее.Если это так, дайте мне знать, и я обновлю ответ.

Отказ от ответственности: я не проверял код, но он должен скомпилироваться и нормально работать.

1 голос
/ 23 декабря 2010

Примерно так должно работать:

NSString *string = @"Here is an example string HELLO ";

if ([string hasSuffix:@" "]) {
    NSString *spaceReplacement = @"text that i want";
    NSString *replacedString = [[string substringToIndex:
            [string length]] stringByAppendingString:spaceReplacement];
    NSLog(@"replacedString == %@", replacedString);
}
0 голосов
/ 21 июня 2016

Для решения @Senseful note

Если строка не всегда содержит пробел в конце, этот код, вероятно, потерпит неудачу, и вам потребуется код, который немного сложнее. Если это так, дайте мне знать, и я обновлю ответ.

Я добавил одну строку в код, которая помогает в таких ситуациях и делает код более универсальным:

// Some income sting
NSString * string = @"Here is an example string HELLO ";

// clear string from whitespace in end on string
[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

NSRange rangeToSearch = NSMakeRange(0, [string length]);
NSRange rangeOfSecondToLastSpace = [string rangeOfString:@" "
                                                 options:NSBackwardsSearch
                                                   range:rangeToSearch];
// Replaed with String
NSString * spaceReplacement = @"text that i want";
NSString * result = [string stringByReplacingCharactersInRange:rangeOfSecondToLastSpace
                                                    withString:spaceReplacement];
...