Schneiden Sie Leerzeichen vom Ende eines NSStrings ab


Antworten:


900

Aus dieser Antwort hier entnommen: https://stackoverflow.com/a/5691567/251012

- (NSString *)stringByTrimmingTrailingCharactersInSet:(NSCharacterSet *)characterSet {
    NSRange rangeOfLastWantedCharacter = [self rangeOfCharacterFromSet:[characterSet invertedSet]
                                                               options:NSBackwardsSearch];
    if (rangeOfLastWantedCharacter.location == NSNotFound) {
        return @"";
    }
    return [self substringToIndex:rangeOfLastWantedCharacter.location+1]; // non-inclusive
}

156
Verwenden Sie, um Zeilenumbrüche in den Zeichensatz aufzunehmen whitespaceAndNewlineCharacterSet.
Penfold

9
Nur eine kleine Anmerkung: Diese Methode entfernt die Leerzeichen an beiden Enden. Es werden keine Leerzeichen von der Innenseite der Zeichenfolge entfernt.
Alex

10
Ich verstehe nicht, wie die Nichtbeantwortung der Frage so viele positive Stimmen bringt. Ihre Lösung entfernt auch Leerzeichen am Anfang der Zeichenfolge, und das wurde nicht verlangt.
James Boutcher

4
@ JamesBoutcher Der Grund dafür, dass es so viele positive Stimmen gibt, ist, dass wir hier nach "Trim NSString" in Google gesucht haben und dies die richtige Antwort auf diese Frage ist. Es ist wahr, dass das OP um etwas anderes gebeten hat.
Dan Rosenstark

20

Eine andere Lösung besteht darin, eine veränderbare Zeichenfolge zu erstellen:

//make mutable string
NSMutableString *stringToTrim = [@" i needz trim " mutableCopy];

//pass it by reference to CFStringTrimSpace
CFStringTrimWhiteSpace((__bridge CFMutableStringRef) stringToTrim);

//stringToTrim is now "i needz trim"

13

Bitte schön...

- (NSString *)removeEndSpaceFrom:(NSString *)strtoremove{
    NSUInteger location = 0;
    unichar charBuffer[[strtoremove length]];
    [strtoremove getCharacters:charBuffer];
    int i = 0;
    for(i = [strtoremove length]; i >0; i--) {
        NSCharacterSet* charSet = [NSCharacterSet whitespaceCharacterSet];
        if(![charSet characterIsMember:charBuffer[i - 1]]) {
            break;
        }
    }
    return [strtoremove substringWithRange:NSMakeRange(location, i  - location)];
}

Also jetzt nenn es einfach. Angenommen, Sie haben eine Zeichenfolge mit Leerzeichen an der Vorderseite und Leerzeichen am Ende und möchten nur die Leerzeichen am Ende entfernen. Sie können dies folgendermaßen aufrufen:

NSString *oneTwoThree = @"  TestString   ";
NSString *resultString;
resultString = [self removeEndSpaceFrom:oneTwoThree];

resultString wird dann am Ende keine Leerzeichen haben.


8

So entfernen Sie Leerzeichen nur vom Anfang und Ende eines Strings in Swift:

Swift 3

string.trimmingCharacters(in: .whitespacesAndNewlines)

Frühere Swift-Versionen

string.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()))

1
Wird dies nicht ALLE Leerzeichen und Zeilenumbrüche kürzen? Die Frage fragt, wie man vom Ende trimmt.
Giorgos Ath

@GiorgosAth Nein, dies wird nur die Zeichen vom Anfang oder Ende der Zeichenfolge abschneiden. Aus der Apple-Dokumentation für stringByTrimmigCharactersInSet:- "Gibt eine neue Zeichenfolge zurück, die durch Entfernen der in einem bestimmten Zeichensatz enthaltenen Empfängerzeichen an beiden Enden erstellt wurde." developer.apple.com/reference/foundation/nsstring/…
lostAtSeaJoshua

@GiorgosAth auch dies ist der gleiche genaue Code wie die akzeptierte Antwort nur in Swift.
lostAtSeaJoshua

Die Frage war über das Entfernen vom Ende. Diese Antwort wird von Anfang und Ende entfernt. Daher ist dies keine gültige Antwort.
Patrick

8
NSString *trimmedString = [string stringByTrimmingCharactersInSet:
                              [NSCharacterSet whitespaceAndNewlineCharacterSet]];
//for remove whitespace and new line character

NSString *trimmedString = [string stringByTrimmingCharactersInSet:
                              [NSCharacterSet punctuationCharacterSet]]; 
//for remove characters in punctuation category

Es gibt viele andere Zeichensätze. Überprüfen Sie es selbst gemäß Ihren Anforderungen.


1
Wird dies nicht ALLE Leerzeichen und Zeilenumbrüche kürzen? Die Frage fragt, wie man vom Ende trimmt.
Giorgos Ath

@ giorgos-ath - Ja, es entfernt den Leerraum vom Ende
g212gs

Die Frage war über das Entfernen vom Ende. Diese Antwort wird von Anfang und Ende entfernt. Daher ist dies keine gültige Antwort.
Patrick

4

Schnelle Version

Trimmt nur Leerzeichen am Ende des Strings:

private func removingSpacesAtTheEndOfAString(var str: String) -> String {
    var i: Int = countElements(str) - 1, j: Int = i

    while(i >= 0 && str[advance(str.startIndex, i)] == " ") {
        --i
    }

    return str.substringWithRange(Range<String.Index>(start: str.startIndex, end: advance(str.endIndex, -(j - i))))
}

Trimmt Leerzeichen auf beiden Seiten des Strings:

var str: String = " Yolo "
var trimmedStr: String = str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

1
Die Frage ist, wie man Leerzeichen am Ende abschneidet. Ihr Code schneidet beide Seiten.
JakubKnejzlik

Dieser Code wird nicht kompiliert. Methoden countElements () und advanced () sind nicht definiert.
Petrsyn

4

Dadurch werden nur die nachfolgenden Zeichen Ihrer Wahl entfernt.

func trimRight(theString: String, charSet: NSCharacterSet) -> String {

    var newString = theString

    while String(newString.characters.last).rangeOfCharacterFromSet(charSet) != nil {
        newString = String(newString.characters.dropLast())
    }

    return newString
}

3

In Swift

So schneiden Sie Leerzeichen und Zeilenumbrüche von beiden Seiten des Strings ab:

var url: String = "\n   http://example.com/xyz.mp4   "
var trimmedUrl: String = url.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())

3

Eine einfache Lösung, um in Ziel-C nur ein Ende anstelle beider Enden zu kürzen:

@implementation NSString (category)

/// trims the characters at the end
- (NSString *)stringByTrimmingSuffixCharactersInSet:(NSCharacterSet *)characterSet {
    NSUInteger i = self.length;
    while (i > 0 && [characterSet characterIsMember:[self characterAtIndex:i - 1]]) {
        i--;
    }
    return [self substringToIndex:i];
}

@end

Und ein symmetrisches Dienstprogramm zum Trimmen nur des Anfangs:

@implementation NSString (category)

/// trims the characters at the beginning
- (NSString *)stringByTrimmingPrefixCharactersInSet:(NSCharacterSet *)characterSet {
    NSUInteger i = 0;
    while (i < self.length && [characterSet characterIsMember:[self characterAtIndex:i]]) {
        i++;
    }
    return [self substringFromIndex:i];
}

@end

3

Um all zu trimmen hintere Leerzeichen (Ich vermute , das ist eigentlich Ihre Absicht), ist die folgende eine ziemlich sauber und präzise Art und Weise , es zu tun.

Swift 5:

let trimmedString = string.replacingOccurrences(of: "\\s+$", with: "", options: .regularExpression)

Ziel c:

NSString *trimmedString = [string stringByReplacingOccurrencesOfString:@"\\s+$" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, string.length)];

Eine Zeile mit einem Schuss Regex.


1

Die Lösung wird hier beschrieben: Wie entferne ich Leerzeichen vom rechten Ende von NSString?

Fügen Sie NSString die folgenden Kategorien hinzu:

- (NSString *)stringByTrimmingTrailingCharactersInSet:(NSCharacterSet *)characterSet {
    NSRange rangeOfLastWantedCharacter = [self rangeOfCharacterFromSet:[characterSet invertedSet]
                                                               options:NSBackwardsSearch];
    if (rangeOfLastWantedCharacter.location == NSNotFound) {
        return @"";
    }
    return [self substringToIndex:rangeOfLastWantedCharacter.location+1]; // non-inclusive
}

- (NSString *)stringByTrimmingTrailingWhitespaceAndNewlineCharacters {
    return [self stringByTrimmingTrailingCharactersInSet:
            [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

Und du benutzt es als solches:

[yourNSString stringByTrimmingTrailingWhitespaceAndNewlineCharacters]

0

Ich habe mir diese Funktion ausgedacht, die sich im Grunde ähnlich verhält wie in der Antwort von Alex:

-(NSString*)trimLastSpace:(NSString*)str{
    int i = str.length - 1;
    for (; i >= 0 && [str characterAtIndex:i] == ' '; i--);
    return [str substringToIndex:i + 1];
}

whitespaceCharacterSetNeben dem Leerzeichen selbst befindet sich auch ein Tabulatorzeichen, das in meinem Fall nicht erscheinen konnte. Ein einfacher Vergleich könnte also ausreichen.


-1

let string = "Test Trimmed String"

Verwenden Sie zum Entfernen von Leerzeichen und neuen Zeilen den folgenden Code: -

let str_trimmed = yourString.trimmingCharacters (in: .whitespacesAndNewlines)

Verwenden Sie den folgenden Code, um nur Leerzeichen aus der Zeichenfolge zu entfernen: -

let str_trimmed = yourString.trimmingCharacters (in: .whitespaces)


-7
NSString* NSStringWithoutSpace(NSString* string)
{
    return [string stringByReplacingOccurrencesOfString:@" " withString:@""];
}
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.