Cortar espaços do final de um NSString

Respostas:

900

Retirado desta resposta aqui: 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
fonte
156
Para incluir novas linhas no conjunto de caracteres, use whitespaceAndNewlineCharacterSet.
Penfold
9
Apenas uma pequena nota: esse método remove os espaços em branco das duas extremidades. Não remove espaços em branco do interior da cadeia.
21414 Alex
10
Eu não entendo como não responder à pergunta recebe tantos votos positivos. Sua solução também remove os espaços em branco no início da string, e não foi isso que foi solicitado.
James Boutcher 27/10/2015
4
@JamesBoutcher, a razão pela qual obtemos tantos votos positivos é que chegamos aqui procurando "aparar NSString" no Google e esta é a resposta certa para essa pergunta. É verdade que o OP pediu outra coisa.
Dan Rosenstark 19/11/2015
20

Outra solução envolve a criação de sequência mutável:

//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.
fonte
13

Aqui está...

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

Então agora basta ligar. Supondo que você tenha uma string que tenha espaços na frente e espaços no final e você apenas queira remover os espaços no final, você pode chamar assim:

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

resultString não terá espaços no final.

Alex
fonte
8

Para remover os espaços em branco somente do início e do fim de uma string no Swift:

Swift 3

string.trimmingCharacters(in: .whitespacesAndNewlines)

Versões anteriores do Swift

string.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()))
lostAtSeaJoshua
fonte
11
Isso não vai aparar TODOS os caracteres de espaço em branco e nova linha? a pergunta pergunta como cortar a partir do final.
Giorgos Ath
@GiorgosAth Não, isso só vai aparar os caracteres do começo ou do fim da string. Na documentação da apple para stringByTrimmigCharactersInSet:- "Retorna uma nova string criada removendo das duas extremidades dos caracteres do receptor contidos em um determinado conjunto de caracteres". developer.apple.com/reference/foundation/nsstring/...
lostAtSeaJoshua
@GiorgosAth também é o mesmo código exato da resposta aceita apenas no Swift.
lostAtSeaJoshua
A pergunta era sobre remover do final. Essa resposta é removida do começo e do fim. Portanto, essa não é uma resposta válida.
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

Existem muitos outros CharacterSets. Verifique você mesmo conforme sua exigência.

g212gs
fonte
11
Isso não vai aparar TODOS os caracteres de espaço em branco e nova linha? a pergunta pergunta como cortar a partir do final.
Giorgos Ath
@ giorgos-ATH - Sim, ele remove o espaço em branco a partir do final
g212gs
A pergunta era sobre remover do final. Essa resposta é removida do começo e do fim. Portanto, essa não é uma resposta válida.
Patrick
4

RápidoVersão

Apara apenas espaços no final da String:

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

Apara os espaços nos dois lados da String:

var str: String = " Yolo "
var trimmedStr: String = str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
O rei da bruxaria
fonte
11
A questão é sobre aparar os espaços de ponta. Seu código apara ambos os lados.
JakubKnejzlik
Este código não compila. Os métodos countElements () e advance () não estão definidos.
petrsyn
4

Isso removerá apenas os caracteres finais de sua escolha.

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
fonte
3

Na Swift

Para aparar espaço e nova linha dos dois lados da String:

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

Uma solução simples para aparar apenas uma extremidade em vez de ambas as extremidades no 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

E um utilitário simétrico para aparar apenas o começo:

@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
fonte
3

Para aparar todos os caracteres de espaço em branco à direita (acho que isso é realmente sua intenção), o seguinte é uma maneira bastante clara e concisa de fazer isso.

Swift 5:

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

Objetivo-C:

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

Uma linha, com uma pitada de regex.

PixelCloudSt
fonte
1

A solução é descrita aqui: Como remover o espaço em branco da extremidade direita do NSString?

Adicione as seguintes categorias ao 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]];
}

E você o usa como tal:

[yourNSString stringByTrimmingTrailingWhitespaceAndNewlineCharacters]
Snouto
fonte
0

Eu vim com essa função, que basicamente se comporta de maneira semelhante à resposta de Alex:

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

whitespaceCharacterSetalém do próprio espaço inclui também o caractere de tabulação, que no meu caso não pôde aparecer. Então eu acho que uma comparação simples pode ser suficiente.

pckill
fonte
-1

let string = "Teste de aparar string"

Para remover o espaço em branco e a nova linha, use o código abaixo: -

deixe str_trimmed = yourString.trimmingCharacters (em: .whitespacesAndNewlines)

Para remover apenas espaços da cadeia, use o código abaixo: -

deixe str_trimmed = yourString.trimmingCharacters (em: .whitespaces)

kangna sharma
fonte
-7
NSString* NSStringWithoutSpace(NSString* string)
{
    return [string stringByReplacingOccurrencesOfString:@" " withString:@""];
}
Ashish Patel
fonte