WedX - журнал о программировании и компьютерных науках

Создайте набор/массив NSString для использования с stringByReplacingOccurrencesOfString.

Я хочу заменить некоторые похожие слова в моем NSString определенной строкой. Например:

stringToChange = [stringToChange stringByReplacingOccurrencesOfString:@"Hello" withString:@"Top o' de marnin ter yer"];
stringToChange = [stringToChange stringByReplacingOccurrencesOfString:@"hello" withString:@"Top o' de marnin ter yer"];
stringToChange = [stringToChange stringByReplacingOccurrencesOfString:@"Hey" withString:@"Top o' de marnin ter yer"];
stringToChange = [stringToChange stringByReplacingOccurrencesOfString:@"hey" withString:@"Top o' de marnin ter yer"];
stringToChange = [stringToChange stringByReplacingOccurrencesOfString:@"Hi" withString:@"Top o' de marnin ter yer"];
stringToChange = [stringToChange stringByReplacingOccurrencesOfString:@"hi" withString:@"Top o' de marnin ter yer"];

Очевидно, это не очень эффективно, и мне трудно найти решение.

Можно ли поместить эти NSString в массив или какой-то набор строк, чтобы результирующий код выглядел примерно так:

stringToChange = [stringToChange stringByReplacingOccurrencesOfString:arrayOfStrings withString:@"Top o' de marnin ter yer"];

Где arrayOfStrings будет содержать @"Hello", @"hello", @"Hey", @"hey", @"Hi", @"hi".


Ответы:


1

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

Вместо этого вы должны использовать NSScanner, перемещаясь по строке по мере нахождения совпадений. Для более длинных исходных строк вы обнаружите, что это гораздо более эффективно как во времени, так и в пространстве. Использование stringByReplacingOccurrencesOfString:withString: каждый раз создает новую строку; вы, конечно, могли бы улучшить это, преобразовав сначала в NSMutableString и используя replaceOccurrencesOfString:withString:options:range:

Вот как использовать сканер:

NSScanner * scanner = [NSScanner scannerWithString:source];
NSMutableString * fixedUpString = [NSMutableString string];

NSArray * searchStrings = @[/* The items you want to remove */];
NSString * replacementString = /* The new material */;

while( ![scanner isAtEnd] ){

    // Moving through the string, try each search in turn
    for( NSString * searchString in searchStrings ){

        // If there's a match, save what's been scanned up to that point
        NSString * scanned;
        if( [scanner scanUpToString:searchString intoString:&scanned] ){

            [fixedUpString appendString:scanned];
            // and add the new material
            [fixedUpString appendString:replacementString];
            // Move past the searched piece and continue
            [scanner scanString:searchString intoString:NULL];
        }
    }
}

fixedUpString теперь содержит все содержимое исходной строки с заменой целевых фраз.

03.02.2016
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]