Entfernen Sie alle Leerzeichen aus NSString


134

Ich habe versucht, die weißen Räume in einem loszuwerden NSString entfernen, aber keine der Methoden, die ich ausprobiert habe, hat funktioniert.

Ich habe "this is a test"und ich will bekommen"thisisatest" .

Ich habe verwendet whitespaceCharacterSet, was die Leerzeichen beseitigen soll.

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

aber ich bekam immer die gleiche Zeichenfolge mit Leerzeichen. Irgendwelche Ideen?


2
Es gibt keinen einfachen Weg, aber dieser Link hat gute Antworten - stackoverflow.com/questions/758212/…
Kaffee

2
@Adel Aber keine akzeptierten Antworten =)
Almas Adilbek

Antworten:


303

stringByTrimmingCharactersInSet Entfernt nur Zeichen vom Anfang und Ende der Zeichenfolge, nicht die Zeichen in der Mitte.

1) Wenn Sie nur ein bestimmtes Zeichen (z. B. das Leerzeichen) aus Ihrer Zeichenfolge entfernen müssen, verwenden Sie:

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

2) Wenn Sie wirklich eine Reihe von Zeichen entfernen müssen (nämlich nicht nur das Leerzeichen, sondern auch Leerzeichen wie Leerzeichen, Tabulatoren, unzerbrechliches Leerzeichen usw.), können Sie Ihre Zeichenfolge aufteilen, indem Sie whitespaceCharacterSetdie Wörter dann wieder in einer Zeichenfolge zusammenfügen ::

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

Beachten Sie, dass diese letzte Lösung den Vorteil hat, dass jedes Leerzeichen und nicht nur Leerzeichen behandelt werden, sondern auch etwas weniger effizient ist als die stringByReplacingOccurrencesOfString:withString:. Wenn Sie also wirklich nur das Leerzeichen entfernen müssen und sicher sind, dass Sie kein anderes Leerzeichen als das einfache Leerzeichen haben, verwenden Sie die erste Methode.


Hervorragend! Vielen Dank!
iGatiTech

33

Ich bevorzuge die Verwendung von Regex wie folgt:

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

Sie können sich eine Kategorie auf NSString machen, um das Leben noch einfacher zu machen:

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

}}

Hier ist auch eine Unit-Test-Methode:

- (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 man, ich mag das eingeschlossene Unit-Test-Geschäft. Jetzt kann ich nicht nur meinen Code aus SO kopieren und einfügen, sondern auch die Tests für diesen Code kopieren und einfügen!
TylerJames

13

Einfache Aufgabe mit stringByReplacingOccurrencesOfString

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

1
Stimmen Sie jedoch nur zu, wenn Sie keine Leerzeichen benötigen. Ich wollte das benutzen, merkte dann aber, dass ich neue Zeilen in meiner Saite hatte.
Mobibob

7

Dies kann Ihnen helfen, wenn Sie \u00a0anstelle von (Leerzeichen) auftreten. Ich hatte dieses Problem, als ich versuchte, Gerätekontakt-Telefonnummern zu extrahieren. Ich musste die phoneNumber-Zeichenfolge so ändern, dass sie kein Leerzeichen enthält.

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

Wann yourStringwar die aktuelle Telefonnummer?


Das hat einer Menge geholfen! Daran war ich auch festgefahren! Vielen Dank Alter! : D
Rafi

Für Swift 3 können Sie verwendenyourString.replacingOccurrences(of: "\u{00a0}", with: "")
Okhan Okbay

4

stringByReplacingOccurrencesOfString ersetzt alle Leerzeichen in der Zeichenfolge und nicht nur den Anfang und das Ende

Verwenden

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]

5
Sie sagen zu verwenden, stringByReplacingOccurrencesOfStringaber geben Sie ein Beispiel für stringByTrimmingCharactersInSet?
Flexicoder

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

Während dieser Code das Problem lösen kann, würden ein paar erklärende Worte einen großen Beitrag dazu leisten, diese Antwort für zukünftige Leser wertvoll zu machen.
Thom

4

Dies ist für mich der beste Weg, 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)

und das Ergebnis ist: ciaociao

Aber der Trick ist das!

 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

Verwenden Sie unter Marco und entfernen Sie den Raum.

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

in einer anderen Datei TRIM aufrufen:

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

Möge es Ihnen helfen ...


3

Dies dient zum Entfernen von Leerzeichen, wenn Sie Text aus einem Textfeld abrufen. Wenn Sie jedoch Leerzeichen zwischen Zeichenfolgen entfernen möchten, können Sie diese verwenden

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

Es ersetzt den leeren Raum ohne Leerzeichen und das leere Feld wird durch die folgende Methode behandelt:

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

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

Bitte erläutern Sie ein wenig, was dieses Snippet bewirkt, und korrigieren Sie seine Formatierung.
Yurii

-2

Ich empfehle dringend, dies irgendwo in Ihrem Projekt zu platzieren:

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

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

1
Dies ist keine Antwort auf die Frage.
Ben Lachman
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.