webentwicklung-frage-antwort-db.com.de

Trimmen Sie Leerzeichen vom Ende eines NSStrings

Ich muss Leerzeichen am Ende einer Zeichenfolge entfernen. Wie kann ich das machen? Beispiel: Wenn der String "Hello " Ist, muss er zu "Hello" Werden.

363

Verwenden Sie - stringByTrimmingCharactersInSet:

NSString *string = @" this text has spaces before and after ";
NSString *trimmedString = [string stringByTrimmingCharactersInSet:
                                  [NSCharacterSet whitespaceAndNewlineCharacterSet]];

(Dadurch werden Leerzeichen an beiden Enden abgeschnitten.).

Swift 3

let string = " this text has spaces before and after "
let trimmedString = string.trimmingCharacters(in: .whitespacesAndNewlines)
893
Dan

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"
20
Matt H.

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)];
}

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

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

resultString hat dann am Ende keine Leerzeichen.

12
Alex

So entfernen Sie in Swift Leerzeichen nur vom Anfang und Ende einer Zeichenfolge:

Schnell 3

string.trimmingCharacters(in: .whitespacesAndNewlines)

Vorherige Swift Versionen

string.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()))
8
lostAtSeaJoshua
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. Prüfen Sie es selbst nach Ihren Wünschen.

5
g212gs

Swift Version

Schneidet nur Leerzeichen am Ende des Strings ab:

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))))
}

Schneidet Leerzeichen auf beiden Seiten des Strings ab:

var str: String = " Yolo "
var trimmedStr: String = str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
4
King-Wizard

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
}
4
Teo Sartori

Eine einfache Lösung, um in Objective-C nur ein Ende anstelle beider Enden zu trimmen:

@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
Cœur

Um alle nachgestellten Leerzeichen zu kürzen (ich schätze, das ist eigentlich Ihre Absicht), ist das Folgende ein ziemlich sauberes & prägnante Weise, es zu tun:

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

Eine Zeile mit einem Schuss Regex.

3
PixelCloudSt

In Swift

So schneiden Sie Leerzeichen und Zeilenvorschub von beiden Seiten des Strings ab:

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

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

Fügen Sie die folgenden Kategorien zu NSString 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 Sie verwenden es als solches:

[yourNSString stringByTrimmingTrailingWhitespaceAndNewlineCharacters]
1
Snouto

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

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

whitespaceCharacterSet enthält neben Leerzeichen auch Tabulatorzeichen, die in meinem Fall nicht vorkommen konnten. Ein einfacher Vergleich könnte also ausreichen.

0
pckill