Remover caracteres de NSString?

95
NSString *myString = @"A B C D E F G";

Quero remover os espaços, então a nova string seria "ABCDEFG".

Raju
fonte

Respostas:

280

Você pode usar:

NSString *stringWithoutSpaces = [myString 
   stringByReplacingOccurrencesOfString:@" " withString:@""];
Tom Jefferys
fonte
Você pode formatar trechos de código em uma fonte monoespaçada para legibilidade. No momento, distinguir a primeira corda é um pouco complicado
Mike Abdullah
4
Observe que "ocorrências" é escrito com dois r's.
mais 1 na esperança de chegar a 256. smh
Will Von Ullrich
Isso SÓ funciona se os 'espaços' forem um valor ASCII bem comportado = 32 (% 20) caracteres. Para remover TODOS os caracteres de espaço em branco possíveis, use a solução de Jim Dovey abaixo.
Linasses
80

Se você deseja oferecer suporte a mais de um espaço por vez, ou qualquer espaço em branco, você pode fazer o seguinte:

NSString* noSpaces =
    [[myString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
                           componentsJoinedByString:@""];
Jim Dovey
fonte
5
É mais útil para uso geral.
mxg
eu gosto disso! Quero remover todos os caracteres especiais em um número de telefone e manter apenas os dígitos.
karim
muito mais fácil: yourString = [yourString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
Daniel
3
Trimming apenas remove os caracteres correspondentes quando eles ocorrem no início e no final da string, então `ABCDEF` se tornaria A B C D E F.
Jim Dovey
11

Retirado de NSString

stringByReplacingOccurrencesOfString:withString:

Retorna uma nova string na qual todas as ocorrências de uma string de destino no receptor são substituídas por outra string fornecida.

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

Parâmetros

alvo

The string to replace.

substituição

The string with which to replace target.

Valor de retorno

Uma nova string na qual todas as ocorrências de alvo no receptor são substituídas por substituição.

visakh7
fonte
11

Tudo acima vai funcionar bem. Mas o método certo é este:

yourString = [yourString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

Funcionará como um método TRIM. Isso removerá todos os espaços da frente e de trás.

obrigado

Mitesh Khatri
fonte
7
Não, ele remove apenas os espaços do início e do final da string, não os espaços entre outros caracteres.
Jim Dovey
@JimDovey eu já mencionei isso no meu comentário. # Funcionará como um método TRIM. Isso removerá todos os espaços da frente e de trás. #
Mitesh Khatri de
2
@MiteshKhatri Sim, mas ainda não resolve o problema original, que é remover todos os espaços em branco do meio da string, não apenas os espaços em branco à esquerda e à direita.
Jim Dovey
@JimDovey para remover todos os espaços, use o código abaixo: MyStr = [MyStr stringByReplacingOccurrencesOfString: @ "" withString: @ ""];
Mitesh Khatri
1
Isso ainda removerá apenas caracteres de espaço ASCII; coisas como espaços de largura zero, espaços sem quebra Unicode, novas linhas, feeds de formulário, tabs, tabs verticais e assim por diante ainda permanecerão na string. Daí a existência de [NSCharacterSet whitespaceCharacterSet]e [NSCharacterSet whitespaceAndNewlineCharacterSet].
Jim Dovey
6

se a string for mutável , você pode transformá-la no lugar usando este formulário:

[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];

isso também é útil se você quiser que o resultado seja uma instância mutável de uma string de entrada:

NSMutableString * string = [concreteString mutableCopy];
[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];
justin
fonte
3

Você pode tentar isso

- (NSString *)stripRemoveSpaceFrom:(NSString *)str {
    while ([str rangeOfString:@"  "].location != NSNotFound) {
        str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
    }
    return str;
}

Espero que isso ajude você.

Kamleshwar
fonte