Objective-C String-Replace - PullRequest
       12

Objective-C String-Replace

3 голосов
/ 30 августа 2010

Я хочу заменить несколько элементов в моей строке в Objective-C.

В PHP вы можете сделать это:

str_replace(array("itemtoreplace", "anotheritemtoreplace", "yetanotheritemtoreplace"), "replacedValue", $string);

Однако в target-c единственный известный мне метод - это NSString replaceOccurancesOfString.Есть ли эффективный способ заменить несколько строк?

Это мое текущее решение (очень неэффективное и ... ну ... длинное)

NSString *newTitle = [[[itemTitleField.text stringByReplacingOccurrencesOfString:@"'" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@"'"] stringByReplacingOccurrencesOfString:@"^" withString:@""];

Понимаете, что я имею в виду?

Спасибо, Кристиан Стюарт

Ответы [ 4 ]

12 голосов
/ 30 августа 2010

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

// Original String
NSString *originalString = @"My^ mother^ told me not to go' outside' to' play today. Why did I not listen to her?";

// Method Start
// MutableArray of String-pairs Arrays
NSMutableArray *arrayOfStringsToReplace = [NSMutableArray arrayWithObjects:
                                           [NSArray arrayWithObjects:@"'",@"",nil], 
                                           [NSArray arrayWithObjects:@" ",@"'",nil], 
                                           [NSArray arrayWithObjects:@"^",@"",nil], 
                                           nil];

// For or while loop to Find and Replace strings
while ([arrayOfStringsToReplace count] >= 1) {
    originalString = [originalString stringByReplacingOccurrencesOfString:[[arrayOfStringsToReplace objectAtIndex:0] objectAtIndex:0]
                                              withString:[[arrayOfStringsToReplace objectAtIndex:0] objectAtIndex:1]];
    [arrayOfStringsToReplace removeObjectAtIndex:0];
}

// Method End

Выход:

2010-08-29 19:03:15.127 StackOverflow[1214:a0f] My'mother'told'me'not'to'go'outside'to'play'today.'Why'did'I'not'listen'to'her?
2 голосов
/ 30 августа 2010

Нет более компактного способа написать это с помощью фреймворков Cocoa.Это может показаться неэффективным с точки зрения кода, но на практике такого рода вещи, вероятно, возникнут не так часто, и если ваш вклад не слишком велик и вы делаете это невероятно часто, вы не пострадаете за это.Для удобства чтения попробуйте написать их в трех отдельных строках, а не связывать их в цепочку.

Вы всегда можете написать свою собственную функцию, если вы делаете что-то критически важное для производительности, которое требует пакетной замены, например, такой.Это был бы даже забавный вопрос для интервью.:)

0 голосов
/ 30 августа 2010

Рассматриваете написание своего собственного метода?Токенизируйте строку и повторяйте их все, заменяя одно на другое, действительно нет более быстрого способа, чем O (n), заменить слова в строке.

0 голосов
/ 30 августа 2010

Добавьте @ в начало всех строк, как в

withString:@""

Это отсутствует для некоторых.

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