Pangkas spasi dari ujung NSString


Jawaban:


900

Diambil dari jawaban ini di sini: 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
Untuk memasukkan baris baru dalam set karakter, gunakan whitespaceAndNewlineCharacterSet.
Penfold

9
Hanya sedikit catatan: metode ini menghilangkan spasi putih dari kedua ujungnya. Itu tidak menghilangkan spasi putih dari bagian dalam string.
Alex

10
Saya tidak mengerti bagaimana tidak menjawab pertanyaan mendapat begitu banyak upvotes. Solusi Anda menghilangkan spasi putih di awal string juga, dan bukan itu yang diminta.
James Boutcher

4
@ JamesBoutcher alasan mengapa mendapat begitu banyak upvotes adalah bahwa kami tiba di sini mencari "trim NSString" di Google dan ini adalah jawaban yang tepat untuk pertanyaan itu. Memang benar bahwa OP meminta sesuatu yang lain.
Dan Rosenstark

20

Solusi lain melibatkan pembuatan string yang bisa berubah-ubah:

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

Ini dia ...

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

Jadi sekarang panggil saja. Andaikan Anda memiliki string yang memiliki spasi di depan dan spasi di ujung dan Anda hanya ingin menghapus spasi di ujung, Anda bisa menyebutnya seperti ini:

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

resultString tidak akan memiliki spasi di akhir.


8

Untuk menghapus spasi putih hanya dari awal dan akhir string di Swift:

Cepat 3

string.trimmingCharacters(in: .whitespacesAndNewlines)

Versi Swift Sebelumnya

string.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()))

1
Bukankah ini akan memangkas SEMUA karakter spasi dan baris baru? pertanyaannya adalah bagaimana cara memotong dari ujung.
Giorgos Ath

@GiorgosAth Tidak ini hanya akan memangkas karakter dari awal atau akhir string. Dari dokumentasi apel untuk stringByTrimmigCharactersInSet:- "Mengembalikan string baru yang dibuat dengan menghapus dari kedua ujung karakter penerima yang terkandung dalam set karakter yang diberikan." developer.apple.com/reference/foundation/nsstring/…
lostAtSeaJoshua

@GiorgosAth juga ini adalah kode yang sama persis dengan jawaban yang diterima hanya di Swift.
lostAtSeaJoshua

Pertanyaannya adalah tentang menghapus dari akhir. Jawaban ini dihapus dari awal dan akhir. Karenanya ini bukan jawaban yang valid.
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

Ada banyak CharacterSet lainnya. Periksa sendiri sesuai kebutuhan Anda.


1
Bukankah ini akan memangkas SEMUA karakter spasi dan baris baru? pertanyaannya adalah bagaimana cara memotong dari ujung.
Giorgos Ath

@ giorgos-ath - Ya, itu menghilangkan ruang putih dari ujung
g212gs

Pertanyaannya adalah tentang menghapus dari akhir. Jawaban ini dihapus dari awal dan akhir. Karenanya ini bukan jawaban yang valid.
Patrick

4

Swift versi

Hanya memangkas spasi di bagian akhir 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))))
}

Memangkas spasi di kedua sisi String:

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

1
Pertanyaannya adalah tentang memangkas ruang di ujung. Kode Anda memotong kedua sisi.
JakubKnejzlik

Kode ini tidak dikompilasi. Metode countElements () dan advance () tidak didefinisikan.
petrsyn

4

Ini hanya akan menghapus karakter tambahan pilihan Anda.

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

Dalam Swift

Untuk memangkas ruang & baris baru dari kedua sisi String:

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

3

Solusi sederhana untuk hanya memotong satu ujung daripada kedua ujungnya di 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

Dan utilitas simetris untuk memangkas awal saja:

@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

Untuk memangkas semua Trailing karakter spasi (Saya menduga bahwa ini benar-benar Anda maksud), berikut ini adalah cukup bersih & ringkas cara untuk melakukannya.

Swift 5:

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

Tujuan-C:

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

Satu baris, dengan sedikit regex.


1

Solusinya dijelaskan di sini: Bagaimana menghapus spasi putih dari ujung kanan NSString?

Tambahkan kategori berikut ke 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]];
}

Dan Anda menggunakannya seperti itu:

[yourNSString stringByTrimmingTrailingWhitespaceAndNewlineCharacters]

0

Saya datang dengan fungsi ini, yang pada dasarnya berperilaku sama dengan yang ada di jawaban oleh Alex:

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

whitespaceCharacterSetselain ruang itu sendiri termasuk juga karakter tab, yang dalam kasus saya tidak dapat muncul. Jadi saya kira perbandingan sederhana bisa cukup.


-1

biarkan string = "Test String yang Dipotong"

Untuk Menghapus Spasi Putih dan Penggunaan baris baru di bawah kode: -

biarkan str_trimmed = yourString.trimmingCharacters (di: .whitespacesAndNewlines)

Untuk Menghapus hanya Spasi dari string, gunakan kode di bawah ini: -

biarkan str_trimmed = yourString.trimmingCharacters (di: .whitespaces)


-7
NSString* NSStringWithoutSpace(NSString* string)
{
    return [string stringByReplacingOccurrencesOfString:@" " withString:@""];
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.