Remova todos os espaços em branco do NSString


134

Eu tenho tentado me livrar dos espaços em branco em um NSString, mas nenhum dos métodos que tentei funcionou.

Eu tenho "this is a test"e quero receber "thisisatest".

Eu usei whitespaceCharacterSet, o que deveria eliminar os espaços em branco.

NSString *search = [searchbar.text stringByTrimmingCharactersInSet:
                           [NSCharacterSet whitespaceCharacterSet]];

mas eu continuava recebendo a mesma string com espaços. Alguma ideia?


2
Não há uma maneira simples, mas este link tem grandes respostas - stackoverflow.com/questions/758212/...
Coffee

2
@Adel Mas, há respostas aceitas =)
Almas Adilbek

Respostas:


303

stringByTrimmingCharactersInSet remove apenas caracteres do começo e do fim da sequência, não os do meio.

1) Se você precisar remover apenas um determinado caractere (digamos o caractere de espaço) da sua string, use:

[yourString stringByReplacingOccurrencesOfString:@" " withString:@""]

2) Se você realmente precisar remover um conjunto de caracteres (ou seja, não apenas o caractere de espaço, mas qualquer caractere de espaço em branco como espaço, tabulação, espaço inquebrável, etc.), poderá dividir sua string usando a whitespaceCharacterSetjunção das palavras novamente em uma string :

NSArray* words = [yourString componentsSeparatedByCharactersInSet :[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString* nospacestring = [words componentsJoinedByString:@""];

Observe que esta última solução tem a vantagem de manipular todos os caracteres de espaço em branco e não apenas os espaços, mas é um pouco menos eficiente que o stringByReplacingOccurrencesOfString:withString:. Portanto, se você realmente precisar remover apenas o caractere de espaço e tiver certeza de que não terá nenhum outro caractere de espaço em branco além do caractere de espaço simples, use o primeiro método.


Soberbo! Muito obrigado!
IGatiTech 01/04

33

Eu prefiro usar regex como este:

NSString *myString = @"this is a test";
NSString *myNewString = [myString stringByReplacingOccurrencesOfString:@"\\s"
                                     withString:@""
                                        options:NSRegularExpressionSearch
                                          range:NSMakeRange(0, [myStringlength])];
 //myNewString will be @"thisisatest"

Você pode se tornar uma categoria no NSString para tornar a vida ainda mais fácil:

- (NSString *) removeAllWhitespace
{
    return [self stringByReplacingOccurrencesOfString:@"\\s" withString:@""
                                              options:NSRegularExpressionSearch
                                                range:NSMakeRange(0, [self length])];

}

Aqui também está um método de teste de unidade:

- (void) testRemoveAllWhitespace
{
    NSString *testResult = nil;

    NSArray *testStringsArray        = @[@""
                                         ,@"    "
                                         ,@"  basicTest    "
                                         ,@"  another Test \n"
                                         ,@"a b c d e f g"
                                         ,@"\n\tA\t\t \t \nB    \f  C \t  ,d,\ve   F\r\r\r"
                                         ,@"  landscape, portrait,     ,,,up_side-down   ;asdf;  lkjfasdf0qi4jr0213 ua;;;;af!@@##$$ %^^ & *  * ()+  +   "
                                         ];

    NSArray *expectedResultsArray   = @[@""
                                        ,@""
                                        ,@"basicTest"
                                        ,@"anotherTest"
                                        ,@"abcdefg"
                                        ,@"ABC,d,eF"
                                        ,@"landscape,portrait,,,,up_side-down;asdf;lkjfasdf0qi4jr0213ua;;;;af!@@##$$%^^&**()++"
                                        ];

    for (int i=0; i < [testStringsArray count]; i++)
    {
        testResult = [testStringsArray[i] removeAllWhitespace];
        STAssertTrue([testResult isEqualToString:expectedResultsArray[i]], @"Expected: \"%@\" to become: \"%@\", but result was \"%@\"",
                     testStringsArray[i], expectedResultsArray[i], testResult);
    }
}

2
Oh cara, eu gosto disso, incluindo negócios de testes unitários. Agora, não apenas posso copiar e colar meu código do SO, mas também copiar e colar os testes para esse código!
TylerJames

13

Tarefa fácil usando stringByReplacingOccurrencesOfString

NSString *search = [searchbar.text stringByReplacingOccurrencesOfString:@" " withString:@""];

1
Concorde, no entanto, apenas se você não precisar do conjunto de espaços em branco. Eu ia usar isso, mas depois percebi que tinha novas linhas na minha string.
mobibob

7

Isso pode ajudá-lo se você estiver enfrentando \u00a0no lugar de (espaço em branco). Eu tive esse problema ao tentar extrair números de telefone de contato do dispositivo. Eu precisava modificar a string phoneNumber para que ela não tivesse espaços em branco.

NSString* yourString = [yourString stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];

Quando yourStringera o número de telefone atual.


Isso ajudou muito! Eu também estava preso nisso! Valeu mesmo, cara! : D
Rafi

Para o Swift 3, você pode usaryourString.replacingOccurrences(of: "\u{00a0}", with: "")
Okhan Okbay 17/17/17

4

stringByReplacingOccurrencesOfString substituirá todo o espaço em branco na string, não apenas no início e no final

Usar

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]

5
você diz para usar, stringByReplacingOccurrencesOfStringmas dá um exemplo de stringByTrimmingCharactersInSet?
Flexicoder 13/03/14

4
- (NSString *)removeWhitespaces {
  return [[self componentsSeparatedByCharactersInSet:
                    [NSCharacterSet whitespaceCharacterSet]]
      componentsJoinedByString:@""];
}

Embora esse código possa resolver o problema, algumas palavras explicativas ajudariam muito a tornar essa resposta valiosa para futuros leitores.
30415 Thom

4

Esta é para mim a melhor maneira de SWIFT

        let myString = "  ciao   \n              ciao     "
        var finalString = myString as NSString

        for character in myString{
        if character == " "{

            finalString = finalString.stringByReplacingOccurrencesOfString(" ", withString: "")

        }else{
            finalString = finalString.stringByReplacingOccurrencesOfString("\n", withString: "")

        }

    }
     println(finalString)

e o resultado é: ciaociao

Mas o truque é esse!

 extension String {

    var NoWhiteSpace : String {

    var miaStringa = self as NSString

    if miaStringa.containsString(" "){

      miaStringa =  miaStringa.stringByReplacingOccurrencesOfString(" ", withString: "")
    }
        return miaStringa as String

    }
}

let myString = "Ciao   Ciao       Ciao".NoWhiteSpace  //CiaoCiaoCiao

4

Use o marco abaixo e remova o espaço.

#define TRIMWHITESPACE(string) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]

em outro arquivo, chame TRIM:

    NSString *strEmail;
    strEmail = TRIM(@"     this is the test.");

Pode ajudá-lo ...


3

Isso é para remover qualquer espaço que seja quando você obtém texto de qualquer campo de texto, mas se você deseja remover espaço entre as strings, pode usar

xyz =[xyz.text stringByReplacingOccurrencesOfString:@" " withString:@""];

Ele substituirá o espaço vazio por nenhum espaço e o campo vazio será tratado pelo método abaixo:

searchbar.text=[searchbar.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];

-1
pStrTemp = [pStrTemp stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

Por favor, elabore um pouco o que esse snippet faz e corrija sua formatação.
Yurii

-2

Eu sugiro colocar isso em algum lugar do seu projeto:

extension String {
    func trim() -> String {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
    }

    func trim(withSet: NSCharacterSet) -> String {
        return self.stringByTrimmingCharactersInSet(withSet)
    }
}

1
Esta não é uma resposta para a pergunta.
Ben Lachman
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.