Substituição de string em Objective-C

Respostas:

781

Você poderia usar o método

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target 
                                        withString:(NSString *)replacement

... para obter uma nova string com uma substring substituída (consulte a NSStringdocumentação para outras pessoas)

Exemplo de uso

NSString *str = @"This is a string";

str = [str stringByReplacingOccurrencesOfString:@"string"
                                     withString:@"duck"];
epatel
fonte
2
Eu pensei que o ponto de ter NSString e uma subclasse NSMutableString era porque uma instância do NSString é imutável . Enquanto - como qualquer pessoa sã, eu prefiro ter patos do que amarrar qualquer dia - o fato de você simplesmente substituir o conteúdo de strme surpreendeu .
ELE
1
Mas eu acho que o endereço de strmudou no processo
Colas
16
isso não muda. str agora contém toda uma nova string. stringByReplacingOccurencesOfString NÃO modifica a string. Ele simplesmente retorna uma nova string.
Septiadi Agus
22

NSStringos objetos são imutáveis ​​(eles não podem ser alterados), mas há uma subclasse mutável NSMutableString, que fornece vários métodos para substituir caracteres dentro de uma string. Provavelmente é sua melhor aposta.

mipadi
fonte
10

Se você deseja substituir várias strings:

NSString *s = @"foo/bar:baz.foo";
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:."];
s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
NSLog(@"%@", s); // => foobarbazfoo
tania_S
fonte
7

Também é possível substituir a string por stringByReplacingCharactersInRange: withString:

for (int i = 0; i < card.length - 4; i++) {

    if (![[card substringWithRange:NSMakeRange(i, 1)] isEqual:@" "]) {

        NSRange range = NSMakeRange(i, 1);
        card = [card stringByReplacingCharactersInRange:range withString:@"*"];

    }

} //out: **** **** **** 1234
Marlon Ruiz
fonte
0

O problema existe em versões antigas no iOS. no mais recente, a direita para a esquerda funciona bem. O que eu fiz é o seguinte:

primeiro eu verifico a versão do iOS:

if (![self compareCurVersionTo:4 minor:3 point:0])

Do que:

// set RTL on the start on each line (except the first)  
myUITextView.text = [myUITextView.text stringByReplacingOccurrencesOfString:@"\n"
                                                           withString:@"\u202B\n"];
Meir
fonte
0
NSString *stringreplace=[yourString stringByReplacingOccurrencesOfString:@"search" withString:@"new_string"];
Shaik Tamim
fonte
Por favor, use o link editar para explicar como esse código funciona e não apenas forneça o código, pois é mais provável que uma explicação ajude futuros leitores. Veja também Como responder . fonte
Jed Fox