ลบช่องว่างทั้งหมดออกจาก NSString


134

ฉันพยายามกำจัดช่องว่างสีขาวในช่องหนึ่งNSStringแต่ไม่มีวิธีใดที่ฉันได้ลองใช้

ฉันมีและฉันต้องการที่จะได้รับ"this is a test""thisisatest"

ฉันเคยใช้whitespaceCharacterSetซึ่งควรจะกำจัดช่องว่างสีขาว

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

แต่ฉันยังคงได้รับสตริงเดิมที่มีช่องว่าง ความคิดใด ๆ ?


2
ไม่มีวิธีง่ายๆ แต่ลิงค์นี้มีคำตอบที่ดี - stackoverflow.com/questions/758212/…
Coffee

2
@Adel แต่ไม่มีคำตอบที่ยอมรับ =)
Almas Adilbek

คำตอบ:


303

stringByTrimmingCharactersInSet ลบเฉพาะอักขระจากจุดเริ่มต้นและจุดสิ้นสุดของสตริงเท่านั้นไม่ใช่อักขระที่อยู่ตรงกลาง

1)หากคุณต้องการลบเฉพาะอักขระที่กำหนด (พูดว่าอักขระช่องว่าง) จากสตริงของคุณให้ใช้:

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

2)หากคุณต้องการลบชุดของอักขระจริงๆ (ไม่เพียง แต่อักขระช่องว่างเท่านั้น แต่ยังรวมถึงอักขระเว้นวรรคเช่นช่องว่างแท็บช่องว่างที่ไม่สามารถแตกได้ ฯลฯ ) คุณสามารถแยกสตริงของคุณโดยใช้การwhitespaceCharacterSetรวมคำอีกครั้งในสตริงเดียว :

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

โปรดทราบว่าโซลูชันสุดท้ายนี้มีข้อได้เปรียบในการจัดการอักขระเว้นวรรคทุกตัวไม่ใช่เฉพาะช่องว่าง แต่มีประสิทธิภาพน้อยกว่าเล็กน้อยที่ไฟล์stringByReplacingOccurrencesOfString:withString:. ดังนั้นหากคุณต้องการเพียงแค่ลบอักขระช่องว่างและแน่ใจว่าคุณไม่มีอักขระเว้นวรรคอื่นนอกเหนือจากอักขระช่องว่างธรรมดาให้ใช้วิธีแรก


สุดยอด! ขอบคุณมาก!
iGatiTech

33

ฉันชอบใช้ regex แบบนี้:

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

คุณสามารถทำให้ตัวเองเป็นหมวดหมู่ใน NSString เพื่อทำให้ชีวิตง่ายยิ่งขึ้น:

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

}

นี่คือวิธีการทดสอบหน่วยด้วย:

- (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
โอ้ฉันชอบธุรกิจการทดสอบหน่วยที่รวมอยู่ด้วย ตอนนี้ไม่เพียง แต่ฉันสามารถคัดลอก - วางโค้ดของฉันจาก SO ได้ แต่ฉันยังสามารถคัดลอกวางการทดสอบสำหรับรหัสนั้นได้อีกด้วย!
TylerJames

13

ใช้งานง่าย stringByReplacingOccurrencesOfString

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

1
อย่างไรก็ตามเห็นด้วยเฉพาะในกรณีที่คุณไม่ต้องการชุดช่องว่าง ฉันจะใช้มัน แต่แล้วก็รู้ว่าฉันมีบรรทัดใหม่ในสตริงของฉัน
mobibob

7

สิ่งนี้อาจช่วยคุณได้หากคุณประสบปัญหา\u00a0แทน (ช่องว่าง) ฉันประสบปัญหานี้ขณะพยายามแยกหมายเลขโทรศัพท์ติดต่อของอุปกรณ์ ฉันต้องการแก้ไขสตริง phoneNumber เพื่อให้ไม่มีช่องว่างในนั้น

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

yourStringหมายเลขโทรศัพท์ปัจจุบันคือเมื่อใด


สิ่งนี้ช่วยได้มาก! ฉันก็ติดอยู่เหมือนกัน! ขอบคุณมาก! : D
Rafi

สำหรับ swift 3 คุณสามารถใช้ได้yourString.replacingOccurrences(of: "\u{00a0}", with: "")
Okhan Okbay

4

stringByReplacingOccurrencesOfString จะแทนที่ช่องว่างทั้งหมดในสตริงไม่ใช่เฉพาะจุดเริ่มต้นและจุดสิ้นสุด

ใช้

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]

5
คุณบอกว่าจะใช้stringByReplacingOccurrencesOfStringแต่ให้ยกตัวอย่างstringByTrimmingCharactersInSet?
Flexicoder

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

แม้ว่ารหัสนี้อาจช่วยแก้ปัญหาได้ แต่คำอธิบายสองสามคำจะช่วยให้คำตอบนี้มีประโยชน์ต่อผู้อ่านในอนาคต
ทม

4

นี่คือวิธีที่ดีที่สุดสำหรับฉัน SWIFT

        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)

และผลลัพธ์คือ: ciaociao

แต่ทีเด็ดนี่สิ!

 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

นั่นคือการลบช่องว่างใด ๆ ที่เมื่อคุณได้รับข้อความจากช่องข้อความใด ๆ แต่ถ้าคุณต้องการลบช่องว่างระหว่างสตริงคุณสามารถใช้ได้

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

จะแทนที่พื้นที่ว่างโดยไม่มีช่องว่างและช่องว่างจะได้รับการดูแลโดยวิธีการด้านล่าง:

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

2

ใช้ด้านล่าง marco และลบช่องว่าง

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

ในไฟล์อื่นเรียก TRIM:

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

มันจะช่วยคุณได้ ...


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

โปรดอธิบายเพิ่มเติมเกี่ยวกับสิ่งที่ตัวอย่างนี้ทำและแก้ไขการจัดรูปแบบ
Yurii

-2

ฉันขอแนะนำให้วางไว้ที่ใดที่หนึ่งในโครงการของคุณ:

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

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

1
นี่ไม่ใช่คำตอบสำหรับคำถาม
Ben Lachman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.