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
}
Dan
sumber
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"
Matt H.
sumber
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.

Alex
sumber
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()))
lostAtSeaJoshua
sumber
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.

g212gs
sumber
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())
Raja-Penyihir
sumber
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
}
Teo Sartori
sumber
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())
Tina
sumber
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
Cur
sumber
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.

PixelCloudSt
sumber
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]
Snouto
sumber
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.

pckill
sumber
-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)

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