ลบตัวละครจาก NSString?


คำตอบ:


280

คุณสามารถใช้:

NSString *stringWithoutSpaces = [myString 
   stringByReplacingOccurrencesOfString:@" " withString:@""];

โปรดจัดรูปแบบข้อมูลโค้ดในแบบอักษรที่เว้นวรรคเพื่อความชัดเจน ในปัจจุบันการแยกแยะสตริงแรกเป็นเรื่องยุ่งยากเล็กน้อย
Mike Abdullah

4
โปรดสังเกตว่า "เหตุการณ์" สะกดด้วย r สองตัว

บวก 1 ด้วยความหวังว่าจะถึง 256 smh
Will Von Ullrich

สิ่งนี้จะใช้ได้ผลก็ต่อเมื่อ 'ช่องว่าง' มีความประพฤติดีค่า ASCII = 32 (% 20) อักขระ หากต้องการลบอักขระพื้นที่สีขาวที่เป็นไปได้ทั้งหมดให้ใช้โซลูชันของ Jim Dovey ด้านล่าง
Linasses

80

หากคุณต้องการรองรับพื้นที่มากกว่าหนึ่งครั้งหรือรองรับช่องว่างใด ๆ คุณสามารถทำได้:

NSString* noSpaces =
    [[myString componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
                           componentsJoinedByString:@""];

5
มีประโยชน์มากกว่าสำหรับการใช้งานทั่วไป
mxg

ฉันชอบมัน! ฉันต้องการลบถ่านพิเศษทั้งหมดในหมายเลขโทรศัพท์และเก็บเฉพาะตัวเลข
karim

ง่ายกว่ามาก: yourString = [yourString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];
Daniel

3
การตัดตัวอักษรเพียงเอาที่ตรงกับเมื่อพวกเขาเกิดขึ้นที่จุดเริ่มต้นและจุดสิ้นสุดของสตริงเพื่อ `` ABCDEF A B C D E Fจะกลายเป็น
Jim Dovey

11

นำมาจากNSString

stringByReplacingOccurrencesOfString:withString:

ส่งคืนสตริงใหม่ที่เกิดขึ้นทั้งหมดของสตริงเป้าหมายในตัวรับจะถูกแทนที่ด้วยสตริงอื่นที่กำหนด

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement

พารามิเตอร์

เป้าหมาย

The string to replace.

ทดแทน

The string with which to replace target.

ส่งคืนค่า

สตริงใหม่ที่เกิดขึ้นทั้งหมดของเป้าหมายในเครื่องรับจะถูกแทนที่ด้วยการแทนที่


11

ทั้งหมดข้างต้นจะทำงานได้ดี แต่วิธีที่เหมาะสมคือ:

yourString = [yourString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

มันจะทำงานเหมือนวิธี TRIM มันจะลบช่องว่างด้านหน้าและด้านหลังทั้งหมด

ขอบคุณ


7
ไม่เพียง แต่ลบช่องว่างจากจุดเริ่มต้นและจุดสิ้นสุดของสตริงเท่านั้นไม่ใช่ช่องว่างระหว่างอักขระอื่น ๆ
Jim Dovey

@JimDovey ฉันพูดถึงสิ่งนี้แล้วในความคิดเห็นของฉัน # มันจะทำงานเหมือนวิธี TRIM มันจะลบช่องว่างด้านหน้าและด้านหลังออกทั้งหมด #
Mitesh Khatri

2
@MiteshKhatri คุณทำแล้ว แต่ก็ยังไม่สามารถแก้ปัญหาเดิมได้นั่นคือการลบช่องว่างทั้งหมดออกจากตรงกลางของสตริงไม่ใช่แค่ช่องว่างนำหน้า & ต่อท้าย
Jim Dovey

@JimDovey สำหรับการลบช่องว่างทั้งหมดให้ใช้รหัสด้านล่าง: MyStr = [MyStr stringByReplacingOccurrencesOfString: @ "" withString: @ ""];
Mitesh Khatri

1
ที่จะยังคงลบเฉพาะอักขระช่องว่าง ASCII; สิ่งต่างๆเช่นช่องว่างที่มีความกว้างเป็นศูนย์ช่องว่างที่ไม่ทำลาย Unicode บรรทัดใหม่ฟีดฟอร์มแท็บแท็บแนวตั้งและอื่น ๆ จะยังคงอยู่ในสตริง ดังนั้นการดำรงอยู่ของและ[NSCharacterSet whitespaceCharacterSet] [NSCharacterSet whitespaceAndNewlineCharacterSet]
Jim Dovey

6

หากสตริงไม่แน่นอนคุณสามารถแปลงได้โดยใช้แบบฟอร์มนี้:

[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];

นอกจากนี้ยังมีประโยชน์หากคุณต้องการให้ผลลัพธ์เป็นอินสแตนซ์ที่ไม่แน่นอนของสตริงอินพุต:

NSMutableString * string = [concreteString mutableCopy];
[string replaceOccurrencesOfString:@" "
                        withString:@""
                           options:0
                             range:NSMakeRange(0, string.length)];

3

คุณสามารถลองสิ่งนี้

- (NSString *)stripRemoveSpaceFrom:(NSString *)str {
    while ([str rangeOfString:@"  "].location != NSNotFound) {
        str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
    }
    return str;
}

หวังว่านี่จะช่วยคุณได้

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