Schneiden Sie Leerzeichen vom Ende eines NSStrings ab

367

Ich muss Leerzeichen am Ende einer Zeichenfolge entfernen. Wie kann ich das machen? Beispiel: Wenn Zeichenfolge ist "Hello ", muss es werden"Hello"

Andrea Mario Lufino
quelle
1
Es gibt eine Swift-Version davon. stackoverflow.com/questions/26797739/…
tounaobun

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
}
Dan
quelle
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"
Matt H.
quelle
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.

Alex
quelle
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()))
lostAtSeaJoshua
quelle
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.

g212gs
quelle
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())
König-Zauberer
quelle
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
}
Teo Sartori
quelle
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())
Tina
quelle
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
Cœur
quelle
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.

PixelCloudSt
quelle
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]
Schnauze
quelle
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.

pckill
quelle
-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)

Kangna Sharma
quelle
-7
NSString* NSStringWithoutSpace(NSString* string)
{
    return [string stringByReplacingOccurrencesOfString:@" " withString:@""];
}
Ashish Patel
quelle