Rimuovi tutti gli spazi bianchi da NSString


134

Ho cercato di sbarazzarmi degli spazi bianchi in un NSString, ma nessuno dei metodi che ho provato ha funzionato.

Ho "this is a test"e voglio ottenere "thisisatest".

Ho usato whitespaceCharacterSet, che dovrebbe eliminare gli spazi bianchi.

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

ma ho continuato a ottenere la stessa stringa con spazi. Qualche idea?


2
Non esiste un modo semplice, ma questo link ha grandi risposte - stackoverflow.com/questions/758212/…
Caffè

2
@Adel Ma, nessuna risposta accettata =)
Almas Adilbek,

Risposte:


303

stringByTrimmingCharactersInSet rimuove solo i caratteri dall'inizio e dalla fine della stringa, non quelli nel mezzo.

1) Se è necessario rimuovere solo un determinato carattere (ad esempio il carattere spazio) dalla stringa, utilizzare:

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

2) Se hai davvero bisogno di rimuovere un set di caratteri (vale a dire non solo il carattere spazio, ma qualsiasi carattere spazio bianco come spazio, tabulazione, spazio infrangibile, ecc.), Puoi dividere la stringa usando whitespaceCharacterSetquindi unendo nuovamente le parole in una stringa :

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

Nota che quest'ultima soluzione ha il vantaggio di gestire tutti i caratteri degli spazi bianchi e non solo gli spazi, ma è un po 'meno efficiente di stringByReplacingOccurrencesOfString:withString:. Quindi, se hai davvero bisogno di rimuovere solo il carattere spazio e sei sicuro di non avere nessun altro carattere spazio bianco oltre al carattere spazio semplice, usa il primo metodo.


Stupendo! Molte grazie!
iGatiTech

33

Preferisco usare regex in questo modo:

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

Puoi farti una categoria su NSString per rendere la vita ancora più semplice:

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

}

Ecco un metodo unit test anche su di esso:

- (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 amico, mi piace questo business unit test incluso. Ora non solo posso copiare e incollare il mio codice da SO, ma posso anche copiare e incollare i test per quel codice!
TylerJames,

13

Compito facile usando stringByReplacingOccurrencesOfString

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

1
D'accordo, tuttavia, solo se non è necessario l'insieme di spazi bianchi. Stavo per usarlo, ma poi mi sono reso conto di avere nuove righe nella mia stringa.
mobibob,

7

Questo può aiutarti se stai vivendo \u00a0al posto di (spazi bianchi). Ho avuto questo problema durante il tentativo di estrarre i numeri di telefono di contatto del dispositivo. Avevo bisogno di modificare la stringa phoneNumber in modo che non abbia spazi.

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

Quando yourStringera il numero di telefono corrente.


Questo ha aiutato moltissimo! Ero bloccato anche su quello! Grazie mille amico! : D
Rafi,

Per swift 3 puoi usareyourString.replacingOccurrences(of: "\u{00a0}", with: "")
Okhan Okbay il

4

stringByReplacingOccurrencesOfString sostituirà tutto lo spazio bianco con nella stringa non solo l'inizio e la fine

Uso

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]

5
dici di usare stringByReplacingOccurrencesOfStringma fai un esempio di stringByTrimmingCharactersInSet?
Flexicoder

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

Sebbene questo codice possa risolvere il problema, alcune parole di spiegazione farebbero molto per rendere questa risposta preziosa per i futuri lettori.
Thom,

4

Questo per me è il modo migliore 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 il risultato è: ciaociao

Ma il trucco è questo!

 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

Usa sotto marco e rimuovi lo spazio.

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

in un altro file chiama TRIM:

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

Che ti possa aiutare ...


3

Questo è per rimuovere qualsiasi spazio che è quando si ottiene il testo da qualsiasi campo di testo, ma se si desidera rimuovere lo spazio tra le stringhe è possibile utilizzare

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

Sostituirà lo spazio vuoto senza spazio e il campo vuoto è gestito con il metodo seguente:

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

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

Per favore, elabora un po 'cosa fa questo frammento e correggi la sua formattazione.
Yurii,

-2

Consiglio vivamente di posizionarlo da qualche parte nel tuo progetto:

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

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

1
Questa non è una risposta alla domanda.
Ben Lachman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.