Hapus semua spasi putih dari NSString


134

Saya telah mencoba menghilangkan ruang putih di NSString, tetapi tidak ada metode yang saya coba yang berhasil.

Saya memiliki "this is a test"dan saya ingin mendapatkan "thisisatest".

Saya telah menggunakan whitespaceCharacterSet, yang seharusnya menghilangkan ruang putih.

NSString *search = [searchbar.text stringByTrimmingCharactersInSet:
                           [NSCharacterSet whitespaceCharacterSet]];

tapi saya terus mendapatkan string yang sama dengan spasi. Ada ide?


2
Tidak ada cara yang sederhana, tetapi tautan ini memiliki jawaban yang bagus - stackoverflow.com/questions/758212/…
Kopi

2
@Adel Tapi, tidak ada jawaban yang diterima =)
Almas Adilbek

Jawaban:


303

stringByTrimmingCharactersInSet hanya menghapus karakter dari awal dan akhir string, bukan yang di tengah.

1) Jika Anda hanya perlu menghapus karakter tertentu (katakanlah karakter spasi) dari string Anda, gunakan:

[yourString stringByReplacingOccurrencesOfString:@" " withString:@""]

2) Jika Anda benar-benar perlu menghapus satu set karakter (yaitu tidak hanya karakter spasi, tetapi karakter spasi putih seperti spasi, tab, spasi yang tidak dapat dipecahkan, dll), Anda dapat membagi string Anda menggunakan whitespaceCharacterSetkemudian menggabungkan kata-kata lagi dalam satu string :

NSArray* words = [yourString componentsSeparatedByCharactersInSet :[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString* nospacestring = [words componentsJoinedByString:@""];

Perhatikan bahwa solusi terakhir ini memiliki keuntungan dalam menangani setiap karakter spasi dan tidak hanya spasi, tetapi sedikit kurang efisien daripada file stringByReplacingOccurrencesOfString:withString:. Jadi jika Anda benar-benar hanya perlu menghapus karakter spasi dan yakin Anda tidak akan memiliki karakter spasi selain karakter spasi biasa, gunakan metode pertama.


Hebat! Terima kasih banyak!
iGatiTech

33

Saya lebih suka menggunakan regex seperti ini:

NSString *myString = @"this is a test";
NSString *myNewString = [myString stringByReplacingOccurrencesOfString:@"\\s"
                                     withString:@""
                                        options:NSRegularExpressionSearch
                                          range:NSMakeRange(0, [myStringlength])];
 //myNewString will be @"thisisatest"

Anda dapat menjadikan diri Anda kategori di NSString untuk membuat hidup lebih mudah:

- (NSString *) removeAllWhitespace
{
    return [self stringByReplacingOccurrencesOfString:@"\\s" withString:@""
                                              options:NSRegularExpressionSearch
                                                range:NSMakeRange(0, [self length])];

}

Berikut adalah metode pengujian unit juga:

- (void) testRemoveAllWhitespace
{
    NSString *testResult = nil;

    NSArray *testStringsArray        = @[@""
                                         ,@"    "
                                         ,@"  basicTest    "
                                         ,@"  another Test \n"
                                         ,@"a b c d e f g"
                                         ,@"\n\tA\t\t \t \nB    \f  C \t  ,d,\ve   F\r\r\r"
                                         ,@"  landscape, portrait,     ,,,up_side-down   ;asdf;  lkjfasdf0qi4jr0213 ua;;;;af!@@##$$ %^^ & *  * ()+  +   "
                                         ];

    NSArray *expectedResultsArray   = @[@""
                                        ,@""
                                        ,@"basicTest"
                                        ,@"anotherTest"
                                        ,@"abcdefg"
                                        ,@"ABC,d,eF"
                                        ,@"landscape,portrait,,,,up_side-down;asdf;lkjfasdf0qi4jr0213ua;;;;af!@@##$$%^^&**()++"
                                        ];

    for (int i=0; i < [testStringsArray count]; i++)
    {
        testResult = [testStringsArray[i] removeAllWhitespace];
        STAssertTrue([testResult isEqualToString:expectedResultsArray[i]], @"Expected: \"%@\" to become: \"%@\", but result was \"%@\"",
                     testStringsArray[i], expectedResultsArray[i], testResult);
    }
}

2
Ya ampun, saya suka ini termasuk bisnis unit test. Sekarang saya tidak hanya dapat menyalin-tempel kode saya dari SO, tetapi saya juga dapat menyalin-tempel tes untuk kode itu!
TylerJames

13

Tugas mudah digunakan stringByReplacingOccurrencesOfString

NSString *search = [searchbar.text stringByReplacingOccurrencesOfString:@" " withString:@""];

1
Setuju, bagaimanapun, hanya jika Anda tidak membutuhkan kumpulan spasi. Saya akan menggunakannya, tetapi kemudian menyadari saya memiliki baris baru di string saya.
mobibob

7

Ini dapat membantu Anda jika Anda mengalaminya \u00a0sebagai pengganti (spasi). Saya mengalami masalah ini ketika mencoba mengekstrak Nomor Telepon Kontak Perangkat. Saya perlu memodifikasi string phoneNumber sehingga tidak ada spasi di dalamnya.

NSString* yourString = [yourString stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];

Kapan yourStringnomor telepon saat ini.


Ini sangat membantu! Saya terjebak pada itu juga! Terima kasih banyak! : D
Rafi

Untuk swift 3 Anda dapat menggunakanyourString.replacingOccurrences(of: "\u{00a0}", with: "")
Okhan Okbay

4

stringByReplacingOccurrencesOfString akan mengganti semua spasi putih dengan dalam string bukan hanya awal dan akhir

Menggunakan

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]

5
Anda mengatakan untuk menggunakan stringByReplacingOccurrencesOfStringtetapi memberikan contoh stringByTrimmingCharactersInSet?
Flexicoder

4
- (NSString *)removeWhitespaces {
  return [[self componentsSeparatedByCharactersInSet:
                    [NSCharacterSet whitespaceCharacterSet]]
      componentsJoinedByString:@""];
}

Meskipun kode ini dapat menyelesaikan masalah, beberapa kata penjelasan akan sangat membantu membuat jawaban ini berharga bagi pembaca di masa mendatang.
Thom

4

Bagi saya ini adalah cara SWIFT terbaik

        let myString = "  ciao   \n              ciao     "
        var finalString = myString as NSString

        for character in myString{
        if character == " "{

            finalString = finalString.stringByReplacingOccurrencesOfString(" ", withString: "")

        }else{
            finalString = finalString.stringByReplacingOccurrencesOfString("\n", withString: "")

        }

    }
     println(finalString)

dan hasilnya adalah: ciaociao

Tapi triknya adalah ini!

 extension String {

    var NoWhiteSpace : String {

    var miaStringa = self as NSString

    if miaStringa.containsString(" "){

      miaStringa =  miaStringa.stringByReplacingOccurrencesOfString(" ", withString: "")
    }
        return miaStringa as String

    }
}

let myString = "Ciao   Ciao       Ciao".NoWhiteSpace  //CiaoCiaoCiao

3

Itu untuk menghapus spasi apa pun saat Anda mendapatkan teks dari bidang teks apa pun tetapi jika Anda ingin menghapus spasi di antara string, Anda dapat menggunakan

xyz =[xyz.text stringByReplacingOccurrencesOfString:@" " withString:@""];

Ini akan menggantikan ruang kosong tanpa ruang dan bidang kosong diurus dengan metode di bawah ini:

searchbar.text=[searchbar.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];

2

Gunakan di bawah marco dan hapus ruang.

#define TRIMWHITESPACE(string) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]

di panggilan file lain TRIM:

    NSString *strEmail;
    strEmail = TRIM(@"     this is the test.");

Semoga ini akan membantu Anda ...


-1
pStrTemp = [pStrTemp stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

Harap jelaskan sedikit tentang apa yang dilakukan cuplikan ini dan perbaiki pemformatannya.
Yurii

-2

Saya sangat menyarankan untuk menempatkan ini di suatu tempat dalam proyek Anda:

extension String {
    func trim() -> String {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
    }

    func trim(withSet: NSCharacterSet) -> String {
        return self.stringByTrimmingCharactersInSet(withSet)
    }
}

1
Ini bukanlah jawaban atas pertanyaan.
Ben Lachman
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.