Ajuster les espaces à la fin d'une chaîne NSS


Réponses:


900

Tiré de cette réponse ici: 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
Pour inclure des retours à la ligne dans le jeu de caractères, utilisez whitespaceAndNewlineCharacterSet.
Penfold

9
Juste une petite note: cette méthode supprime les espaces blancs des deux extrémités. Il ne supprime pas les espaces blancs de l'intérieur de la chaîne.
Alex

10
Je ne comprends pas comment le fait de ne pas répondre à la question suscite autant de votes positifs. Votre solution supprime également les espaces au début de la chaîne, et ce n'est pas ce qui a été demandé.
James Boutcher

4
@JamesBoutcher, la raison pour laquelle il obtient autant de votes positifs est que nous sommes arrivés ici à la recherche de "trim NSString" dans Google et c'est la bonne réponse à cette question. C'est vrai que le PO a demandé autre chose.
Dan Rosenstark

20

Une autre solution consiste à créer une chaîne mutable:

//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

Voici...

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

Alors maintenant, appelez-le. Supposons que vous ayez une chaîne avec des espaces à l'avant et des espaces à la fin et que vous vouliez simplement supprimer les espaces à la fin, vous pouvez l'appeler comme ceci:

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

resultString n'aura alors aucun espace à la fin.


8

Pour supprimer des espaces uniquement au début et à la fin d'une chaîne dans Swift:

Swift 3

string.trimmingCharacters(in: .whitespacesAndNewlines)

Versions Swift précédentes

string.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()))

1
Cela ne va-t-il pas couper TOUS les espaces et les caractères de nouvelle ligne? la question demande comment couper à partir de la fin.
Giorgos Ath

@GiorgosAth Non, cela ne fera que couper les caractères du début ou de la fin de la chaîne. De la documentation d'Apple pour stringByTrimmigCharactersInSet:- "Renvoie une nouvelle chaîne créée en supprimant des deux extrémités du récepteur les caractères contenus dans un jeu de caractères donné." developer.apple.com/reference/foundation/nsstring/…
lostAtSeaJoshua

@GiorgosAth c'est aussi le même code exact que la réponse acceptée juste dans Swift.
lostAtSeaJoshua

La question était de retirer de la fin. Cette réponse supprime du début et de la fin. Ce n'est donc pas une réponse valable.
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

Il existe de nombreux autres jeux de caractères. Vérifiez-le vous-même selon vos besoins.


1
Cela ne va-t-il pas couper TOUS les espaces et les caractères de nouvelle ligne? la question demande comment couper à partir de la fin.
Giorgos Ath

@ giorgos-ath - Oui, il supprime l'espace blanc de la fin
g212gs

La question était de retirer de la fin. Cette réponse supprime du début et de la fin. Ce n'est donc pas une réponse valable.
Patrick

4

Version Swift

Ajuste uniquement les espaces à la fin de la chaîne:

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

Découpe les espaces des deux côtés de la chaîne:

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

1
La question porte sur le découpage final des espaces. Votre code coupe les deux côtés.
JakubKnejzlik

Ce code ne se compile pas. Les méthodes countElements () et advance () ne sont pas définies.
petrsyn

4

Cela supprimera uniquement les caractères de fin de votre choix.

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

Dans Swift

Pour couper l'espace et la nouvelle ligne des deux côtés de la chaîne:

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

3

Une solution simple pour couper seulement une extrémité au lieu des deux extrémités dans Objective-C:

@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

Et un utilitaire symétrique pour couper le début uniquement:

@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

Pour couper tous les caractères d'espacement fin (je suppose que c'est en fait votre intention), ce qui suit est une façon assez propre et concise de le faire.

Swift 5:

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

Objectif c:

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

Une ligne, avec un trait de regex.


1

La solution est décrite ici: Comment supprimer les espaces blancs de l'extrémité droite de NSString?

Ajoutez les catégories suivantes à NSString:

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

Et vous l'utilisez comme tel:

[yourNSString stringByTrimmingTrailingWhitespaceAndNewlineCharacters]

0

J'ai créé cette fonction, qui se comporte essentiellement de la même manière que dans la réponse d'Alex:

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

whitespaceCharacterSetoutre l'espace lui-même comprend également un caractère de tabulation, qui dans mon cas ne pouvait pas apparaître. Donc je suppose qu'une simple comparaison pourrait suffire.


-1

let string = "Test Trimmed String"

Pour supprimer les espaces blancs et les nouvelles lignes, utilisez le code ci-dessous: -

laissez str_trimmed = yourString.trimmingCharacters (dans: .whitespacesAndNewlines)

Pour supprimer uniquement les espaces de la chaîne, utilisez le code ci-dessous: -

laissez str_trimmed = yourString.trimmingCharacters (dans: .whitespaces)


-7
NSString* NSStringWithoutSpace(NSString* string)
{
    return [string stringByReplacingOccurrencesOfString:@" " withString:@""];
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.