NSString'in sonundaki boşlukları kırpma


Yanıtlar:


900

Buradaki yanıttan alınmıştır: 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
Karakter kümesine yeni satırlar eklemek için tuşunu kullanın whitespaceAndNewlineCharacterSet.
penfold

9
Sadece küçük bir not: bu yöntem beyaz boşlukları her iki uçtan kaldırır. Dizenin içindeki beyaz boşlukları kaldırmaz.
Alex

10
Soruyu cevaplamamanın nasıl bu kadar çok oy aldığını anlamıyorum. Çözümünüz, dizenin başındaki boşlukları da kaldırır ve istenen bu değildir.
James Boutcher

4
@JamesBoutcher, bu kadar çok oy almasının nedeni, Google'da "trim NSString" i aramak için buraya gelmemizin nedeni ve bu sorunun doğru cevabı. OP'nin başka bir şey istediği doğrudur.
Dan Rosenstark

20

Başka bir çözüm, değiştirilebilir dize oluşturmayı içerir:

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

Hadi bakalım...

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

Öyleyse şimdi ara. Önünde boşluklar ve sonunda boşluklar olan bir dize olduğunu ve sonunda boşlukları kaldırmak istediğinizi varsayalım, şöyle diyebilirsiniz:

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

resultString sonunda boş alan kalmayacak.


8

Swift'te bir dizenin yalnızca başından ve sonundan boşluk kaldırmak için:

Hızlı 3

string.trimmingCharacters(in: .whitespacesAndNewlines)

Önceki Swift Sürümleri

string.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()))

1
Bu TÜM boşluk ve satırsonu karakterlerini düzeltmeyecek mi? soru sondan nasıl kırpılacağını soruyor.
Giorgos Ath

@GiorgosAth Hayır, bu karakterleri yalnızca dizenin başından veya sonundan kesecek. Elma belgelerine stringByTrimmigCharactersInSet:- "İade alıcı karakterlerin her iki ucundan kaldırarak yapılan yeni bir dize verilen bir karakter kümesinde içeriyordu." developer.apple.com/reference/foundation/nsstring/…
lostAtSeaJoshua

@GiorgosAth ayrıca bu sadece Swift'te kabul edilen cevapla aynı koddur.
lostAtSeaJoshua

Soru, sondan kaldırmakla ilgiliydi. Bu cevap başlangıçtan ve sondan çıkar. Bu nedenle bu geçerli bir cevap değil.
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

Başka pek çok CharacterSets var. İhtiyacınıza göre kendiniz kontrol edin.


1
Bu TÜM boşluk ve satırsonu karakterlerini düzeltmeyecek mi? soru sondan nasıl kırpılacağını soruyor.
Giorgos Ath

@ giorgos-ath - Evet, beyaz alanı
sondan kaldırıyor

Soru, sondan kaldırmakla ilgiliydi. Bu cevap başlangıçtan ve sondan çıkar. Bu nedenle bu geçerli bir cevap değil.
Patrick

4

Hızlı sürüm

Yalnızca Dizenin sonundaki boşlukları keser:

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

Dize'nin her iki yanındaki boşlukları düzeltir:

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

1
Soru, sondaki boşlukları düzeltmektir. Kodunuz her iki tarafı da keser.
JakubKnejzlik

Bu kod derlenmiyor. CountElements () ve advance () yöntemleri tanımlanmamıştır.
petrsyn

4

Bu, yalnızca seçtiğiniz karakterleri kaldıracaktır.

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

Swift'te

Dizeyi her iki tarafından da boşluk ve satırsonu kırpmak için:

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

3

Objective-C'de her iki uç yerine yalnızca bir ucu kırpmak için basit bir çözüm:

@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

Ve sadece başlangıcı kesmek için simetrik bir yardımcı program:

@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

Tüm kırpmak için sondaki boşluk karakterleri (Ben tahmin ediyorum aslında senin niyet), şu bunu yapmak için oldukça temiz ve özlü bir yoldur.

Hızlı 5:

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

Objective-C:

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

Bir satır, regex çizgisi ile.


1

Çözüm burada açıklanmıştır: NSString'in sağ ucundan boşluk nasıl kaldırılır?

NSString'e aşağıdaki kategorileri ekleyin:

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

Ve bunu şöyle kullanın:

[yourNSString stringByTrimmingTrailingWhitespaceAndNewlineCharacters]

0

Temelde Alex'in cevabındakine benzer şekilde davranan bu işlevi buldum:

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

whitespaceCharacterSetalanın kendisi de benim durumumda görünemedi sekme karakteri de içerir. Yani basit bir karşılaştırma yeterli olabilir.


-1

let string = "Kesilmiş Dizeyi Test Et"

Beyaz Alanı ve Yeni çizgiyi kaldırmak için aşağıdaki kodu kullanın: -

let str_trimmed = yourString.trimmingCharacters (içinde: .whitespacesAndNewlines)

Yalnızca dizeden Boşlukları Kaldırmak için aşağıdaki kodu kullanın: -

let str_trimmed = yourString.trimmingCharacters (içinde: .whitespaces)


-7
NSString* NSStringWithoutSpace(NSString* string)
{
    return [string stringByReplacingOccurrencesOfString:@" " withString:@""];
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.