Tüm boşlukları NSString'den kaldır


134

Beyaz boşluklardan kurtulmaya çalışıyordum NSString, ama denediğim yöntemlerin hiçbiri işe yaramadı.

Ben aldım "this is a test"ve almak istiyorum "thisisatest".

whitespaceCharacterSetBeyaz boşlukları ortadan kaldırmak için kullanmıştım .

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

ama boşluklarla aynı dizgeyi almaya devam ettim. Herhangi bir fikir?


2
Basit bir yol yoktur, ancak bu bağlantının harika cevapları vardır - stackoverflow.com/questions/758212/…
Coffee

2
@Adel Ama, kabul edilen cevap yok =)
Almas Adilbek

Yanıtlar:


303

stringByTrimmingCharactersInSet karakterleri dizenin başından ve sonundan kaldırır, ortadaki karakterleri değil.

1) Dizenizden yalnızca belirli bir karakteri (boşluk karakteri söyleyin) kaldırmanız gerekirse, şunu kullanın:

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

2) Bir dizi karakteri (yalnızca boşluk karakteri değil, boşluk, sekme, kırılmaz boşluk vb. Gibi herhangi bir boşluk karakteri ) gerçekten kaldırmanız gerekiyorsa whitespaceCharacterSet, kelimeleri bir dizede tekrar birleştirerek kullanarak dizenizi bölebilirsiniz. :

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

Bu son çözümün, yalnızca boşlukları değil, her boşluk karakterini işleme avantajına sahip olduğunu, ancak stringByReplacingOccurrencesOfString:withString:. Bu nedenle, yalnızca boşluk karakterini kaldırmanız gerekiyorsa ve düz boşluk karakterinden başka bir boşluk karakterine sahip olmadığınızdan eminseniz, ilk yöntemi kullanın.


Süper! Çok teşekkürler!
iGatiTech

33

Ben böyle regex kullanmayı tercih ederim:

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

NSString'de hayatı daha da kolaylaştırmak için bir kategori yapabilirsiniz:

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

}

İşte üzerinde de bir birim test yöntemi:

- (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
Oh adamım, buna dahil olan birim testleri işini seviyorum. Şimdi sadece kodumu SO'dan kopyalayıp yapıştırabilirim, aynı zamanda bu kodun testlerini de kopyalayıp yapıştırabilirim!
TylerJames

13

Kolay kullanım stringByReplacingOccurrencesOfString

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

1
Ancak, yalnızca boşluk kümesine ihtiyacınız yoksa kabul edin. Bunu kullanacaktım, ama sonra dizemde yeni satırlar olduğunu fark ettim.
mobibob

7

(Boşluk) \u00a0yerine yaşıyorsanız bu size yardımcı olabilir . Aygıt İletişim Telefon Numaralarını ayıklamaya çalışırken bu sorunu yaşadım. Böylece içinde boşluk yok phoneNumber dize değiştirmek gerekiyordu.

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

Ne zaman yourStringmevcut telefon numarası oldu.


Bu bir ton yardımcı oldu! Ben de takıldım! Çok teşekkürler dostum! : D
Rafi

Hızlı 3 için kullanabilirsinizyourString.replacingOccurrences(of: "\u{00a0}", with: "")
Okhan Okbay

4

stringByReplacingOccurrencesOfString, yalnızca başlangıç ​​ve bitiş değil, tüm beyaz boşluğu dizedeki ile değiştirir

kullanım

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]

5
kullanmak istiyorsun stringByReplacingOccurrencesOfStringama bir örnek veriyor stringByTrimmingCharactersInSetmusun?
Flexicoder

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

Bu kod sorunu çözse de, birkaç açıklama kelimesi bu cevabı gelecekteki okuyucular için değerli kılmak için uzun bir yol kat edecektir.
Thom

4

Bu benim için SWIFT'in en iyi yolu

        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)

ve sonuç: ciaociao

Ama işin püf noktası bu!

 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

4

Marco'nun altında kullanın ve boşluğu kaldırın.

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

başka bir dosyada TRIM çağrısı:

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

Size yardımcı olsun ...


3

Bu, herhangi bir metin alanından metin aldığınızda olan herhangi bir boşluğu kaldırmak içindir, ancak dize arasındaki boşluğu kaldırmak istiyorsanız kullanabilirsiniz

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

Boş alanı boşluk olmadan değiştirecek ve boş alan aşağıdaki yöntemle halledilecektir:

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

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

Lütfen bu pasajın yaptıklarına biraz dikkat edin ve biçimlendirmesini düzeltin.
Yurii

-2

Bunu projenizde bir yere koymanızı şiddetle tavsiye ederim:

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

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

1
Bu sorunun cevabı değil.
Ben Lachman
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.