ฉันจะลบช่องว่างนำหน้าทั้งหมดออกจากสตริงได้อย่างไร - รวดเร็ว


170

ฉันต้องการวิธีลบอักขระแรกจากสตริงซึ่งเป็นช่องว่าง ฉันกำลังมองหาวิธีการหรือแม้กระทั่งการขยายประเภท String ที่ฉันสามารถใช้เพื่อตัดอักขระของสตริง


8
คุณต้องการลบอักขระช่องว่างแรกหรืออักขระช่องว่างทั้งหมดในสตริงหรือไม่
อเล็กซ์

1
ซ้ำเป็นไปได้: การเอาชุดอักขระช่องว่างจากสตริงไม่รวมพื้นที่
Imanou Petit

คำตอบ:


380

หากต้องการลบช่องว่างนำหน้าและต่อท้าย:

let trimmedString = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Swift 3 / Swift 4:

let trimmedString = string.trimmingCharacters(in: .whitespaces)

180
สิ่งนี้จะใช้งานได้กับช่องว่างนำหน้าและต่อท้ายเท่านั้น นี่จะไม่ลบช่องว่างที่อยู่ในสตริง
อาทิตย์ที่

87
หากคุณต้องการลบช่องว่างทั้งหมดคุณสามารถลอง myString.stringByReplacingOccurrencesOfString ("", withString: "")
Lucas

6
คุณสามารถใช้NSCharacterSet.whitespaceAndNewlineCharacterSet()ถ้าคุณต้องการตัดอักขระขึ้นบรรทัดใหม่ด้วย
Blip

2
เพื่อให้ทำงานกับ Swift 3.0 และลบช่องว่างสีขาวในระหว่างสตริงให้ใช้คำตอบ: stackoverflow.com/a/39067610/4886069

2
ผู้ใช้ Swift 3+ คน: yourString.replacingOccurrences (จาก: "", ด้วย: "")
Nadeesha Lakmal

144

วิธีที่ถูกต้องเมื่อคุณต้องการลบช่องว่างทุกประเภท (ตามคำตอบ SO นี้ ) คือ:

extension String {
    var stringByRemovingWhitespaces: String {
        let components = componentsSeparatedByCharactersInSet(.whitespaceCharacterSet())
        return components.joinWithSeparator("")
    }
}

Swift 3.0+ (3.0, 3.1, 3.2, 4.0)

extension String {
    func removingWhitespaces() -> String {
        return components(separatedBy: .whitespaces).joined()
    }
}

แก้ไข

คำตอบนี้ถูกโพสต์เมื่อคำถามเกี่ยวกับการลบช่องว่างทั้งหมดคำถามถูกแก้ไขเพื่อพูดถึงเฉพาะช่องว่างนำหน้า หากคุณต้องการลบช่องว่างนำหน้าให้ใช้สิ่งต่อไปนี้:

extension String {
    func removingLeadingSpaces() -> String {
        guard let index = firstIndex(where: { !CharacterSet(charactersIn: String($0)).isSubset(of: .whitespaces) }) else {
            return self
        }
        return String(self[index...])
    }
}

5
.com. ผู้เสนอราคา (แยกโดย: .whitespacesAndNewlines) สำหรับบรรทัดใหม่ด้วย
ดีเร็ก

นี่น่าจะไม่ใช่ func
Jakub Truhlář

1
เพราะตรรกะของคุณลักษณะ คุณกำลังทำคุณสมบัติคำนวณได้เมื่อคุณควรทำให้ฟังก์ชั่น มันกำลังทำ smt แทนที่จะเป็นค่าหรือคำนวณจากอีกอันหนึ่ง ดูที่: stackoverflow.com/questions/24035276/…
Jakub Truhlář

4
@ JakubTruhlář - นั่นเป็นเรื่องของความเห็นไม่ใช่คำชี้แจงของความเป็นจริง ดูsoftwareengineering.stackexchange.com/questions/304077/…
Ashley Mills

1
@ JakubTruhlářคุณพูดว่า"นี่ควรจะเป็น func ไม่ใช่ var" - ฟังดูเหมือนว่าคุณจะระบุความจริงไม่ใช่ความคิดเห็นของคุณ หากคุณอ่านคำตอบของคำถามที่เชื่อมโยงคุณจะเห็นว่าในขณะที่มัน "สมเหตุสมผล" สำหรับคุณกับคนอื่น ๆ ... ไม่จำเป็น
Ashley Mills

82

ส่วนขยายของสตริงนี้จะลบช่องว่างทั้งหมดออกจากสตริงไม่ใช่เพียงแค่ลบช่องว่างต่อท้าย ...

 extension String {
    func replace(string:String, replacement:String) -> String {
        return self.replacingOccurrences(of: string, with: replacement, options: NSString.CompareOptions.literal, range: nil)
    }

    func removeWhitespace() -> String {
        return self.replace(string: " ", replacement: "")
    }
  }

ตัวอย่าง:

let string = "The quick brown dog jumps over the foxy lady."
let result = string.removeWhitespace() // Thequickbrowndogjumpsoverthefoxylady.

4
ใช้งานได้เฉพาะกับ "" (ไม่พิจารณา whitesapce ประเภทอื่น)
fpg1503

@ fpg1503 พื้นที่ว่างประเภทอื่นเป็นอย่างไร
Ricardo

รายการที่กำหนดไว้ในหมวดหมู่ Zs: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503

45

สวิฟท์ 3

คุณสามารถใช้วิธีนี้เพื่อลบช่องว่างปกติทั้งหมดในสตริง (ไม่พิจารณาช่องว่างทุกประเภท):

let myString = " Hello World ! "
let formattedString = myString.replacingOccurrences(of: " ", with: "")

ผลลัพธ์จะเป็น:

HelloWorld!

1
ใช้งานได้เฉพาะกับ "" (ไม่พิจารณา whitesapce ประเภทอื่น)
fpg1503

@Greg คุณยังคงมี 16 ตัวละครอื่น ๆ : fileformat.info/info/unicode/category/Zs/list.htm
fpg1503

18

คุณยังสามารถใช้ regex

let trimmedString = myString.stringByReplacingOccurrencesOfString("\\s", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)

Swift 4: myString.replacingOccurrences (จาก: "\\ s", ด้วย: "", ตัวเลือก: NSString.CompareOptions.regular Expression, ช่วง: ไม่มี)
norbDEV

16

สำหรับ Swift 3.0+ ดูคำตอบอื่น ๆ นี่คือคำตอบดั้งเดิมสำหรับ Swift 2.x

ตามที่ได้รับคำตอบด้านบนเนื่องจากคุณสนใจที่จะลบตัวอักษรตัวแรกวิธีการ. stringByTrimmingCharactersInSet ()จะทำงานได้ดี:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

นอกจากนี้คุณยังสามารถสร้างชุดอักขระของคุณเองเพื่อตัดขอบเขตของสายอักขระของคุณด้วยเช่น:

myString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))

นอกจากนี้ยังมีวิธีการอินสแตนซ์ในตัวเพื่อจัดการกับการลบหรือแทนที่สตริงย่อยที่เรียกว่าstringByReplacingOccurrencesOfString (เป้าหมาย: สตริงการแทนที่: สตริง)String) มันสามารถลบช่องว่างหรือรูปแบบอื่น ๆ ที่เกิดขึ้นที่ใดก็ได้ในสตริงของคุณ

คุณสามารถระบุตัวเลือกและช่วง แต่ไม่จำเป็นต้อง:

myString.stringByReplacingOccurrencesOfString(" ", withString: "")

นี่เป็นวิธีที่ง่ายในการลบหรือแทนที่รูปแบบการทำซ้ำของอักขระในสายอักขระของคุณและสามารถถูกผูกมัดแม้ว่าแต่ละครั้งที่ผ่านจะต้องผ่านอีกครั้งผ่านสายอักขระทั้งหมดของคุณลดประสิทธิภาพ ดังนั้นคุณสามารถทำสิ่งนี้:

 myString.stringByReplacingOccurrencesOfString(" ", withString: "").stringByReplacingOccurrencesOfString(",", withString: "")

... แต่จะใช้เวลานานกว่าสองเท่า

.stringByReplacingOccurrencesOfString () เอกสารประกอบจากไซต์ Apple

การผูกมัดอินสแตนซ์ของสตริงเหล่านี้บางครั้งอาจสะดวกมากสำหรับการแปลงหนึ่งครั้งตัวอย่างเช่นถ้าคุณต้องการแปลง NSData สั้น ๆ เป็นสตริงฐานสิบหกโดยไม่มีช่องว่างในบรรทัดเดียวคุณสามารถทำได้ด้วย Swift's built in Interpolation แทนที่:

("\(myNSDataBlob)").stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>")).stringByReplacingOccurrencesOfString(" ", withString: "")

ใช้งานได้เฉพาะกับ "" (ไม่พิจารณา whitesapce ประเภทอื่น)
fpg1503

มันยังไม่พิจารณาช่องว่างแบบอื่นที่อยู่ตรงกลางสตริง
fpg1503

12

สำหรับswift 3.0

import Foundation

var str = " Hear me calling"

extension String {
    var stringByRemovingWhitespaces: String {
        return components(separatedBy: .whitespaces).joined()
    }
}

str.stringByRemovingWhitespaces  // Hearmecalling

8

สวิฟต์ 4

กรณีที่ยอดเยี่ยมในการใช้ regex:

" this is    wrong contained teee xt     "
    .replacingOccurrences(of: "^\\s+|\\s+|\\s+$", 
                          with: "", 
                          options: .regularExpression)

// thisiswrongcontainedteeext

7

ฉันจะใช้ส่วนขยายนี้เพื่อให้มีความยืดหยุ่นและเลียนแบบวิธีการสะสมอื่น ๆ :

extension String {
    func filter(pred: Character -> Bool) -> String {
        var res = String()
        for c in self.characters {
            if pred(c) {
                res.append(c)
            }
        }
        return res
    }
}

"this is a String".filter { $0 != Character(" ") } // "thisisaString"

ใช้งานได้เฉพาะกับ "" (ไม่พิจารณา whitesapce ประเภทอื่น)
fpg1503

6

หากคุณต้องการที่จะลบช่องว่างจากด้านหน้า (และด้านหลัง) แต่ไม่ใช่ตรงกลางคุณควรใช้ stringByTrimmingCharactersInSet

    let dirtyString   = " First Word "
    let cleanString = dirtyString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

หากคุณต้องการลบช่องว่างออกจากที่ใดก็ได้ในสตริงคุณอาจต้องการดู stringByReplacing ...


วิธีการลบช่องว่างกลางเช่นกัน?
Nikhil Gupta

@NikhilGupta ไม่นำหน้าและต่อท้ายเท่านั้น (ตัวอย่าง" First Word "ผลลัพธ์"First Word")
fpg1503

6

Swift 4, 4.2 และ 5

ลบช่องว่างจากด้านหน้าและสิ้นสุดเท่านั้น

let str = "  Akbar Code  "
let trimmedString = str.trimmingCharacters(in: .whitespacesAndNewlines)

ลบช่องว่างออกจากทุกที่ในสตริง

let stringWithSpaces = " The Akbar khan code "
let stringWithoutSpaces = stringWithSpaces.replacingOccurrences(of: " ", with: "")

3

คุณสามารถลองสิ่งนี้ได้เช่นกัน

   let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")

ใช้งานได้เฉพาะกับ "" (ไม่พิจารณา whitesapce ประเภทอื่น)
fpg1503

3

ลองใช้การเขียนโปรแกรมใช้งานได้เพื่อลบช่องว่างสีขาว:

extension String {
  func whiteSpacesRemoved() -> String {
    return self.filter { $0 != Character(" ") }
  }
}

3
extension String {

    var removingWhitespaceAndNewLines: String {
        return removing(.whitespacesAndNewlines)
    }

    func removing(_ forbiddenCharacters: CharacterSet) -> String {
        return String(unicodeScalars.filter({ !forbiddenCharacters.contains($0) }))
    }
}

3

หากใครลบช่องว่างเพิ่มเติมจากสตริงเช่น = "This is the demo text remove extra space between the words."

คุณสามารถใช้ฟังก์ชั่นนี้ได้ใน Swift 4

func removeSpace(_ string: String) -> String{
    var str: String = String(string[string.startIndex])
    for (index,value) in string.enumerated(){
        if index > 0{
            let indexBefore = string.index(before: String.Index.init(encodedOffset: index))
            if value == " " && string[indexBefore] == " "{
            }else{
                str.append(value)
            }
        }
    }
    return str
}

และผลลัพธ์จะเป็น

"This is the demo text remove extra space between the words."

3

สวัสดีนี่อาจจะสาย แต่ก็คุ้มค่าที่จะลอง นี่คือจากไฟล์สนามเด็กเล่น คุณสามารถทำให้มันเป็นส่วนขยายของสตริง

สิ่งนี้เขียนใน Swift 5.3

วิธีที่ 1:

var str = "\n \tHello, playground       "
if let regexp = try? NSRegularExpression(pattern: "^\\s+", options: NSRegularExpression.Options.caseInsensitive) {
    let mstr = NSMutableString(string: str)
    regexp.replaceMatches(in: mstr, options: [], range: NSRange(location: 0, length: str.count), withTemplate: "")
    str = mstr as String
}

Result: "Hello, playground       "

วิธีที่ 2:

if let c = (str.first { !($0 == " " || $0 == "\t" || $0 == "\n") }) {
    if let nonWhiteSpaceIndex = str.firstIndex(of: c) {
        str.replaceSubrange(str.startIndex ..< nonWhiteSpaceIndex, with: "")
    }
}

Result: "Hello, playground       "

นี่สำหรับ Swift 5.x
Kyle Emmanuel

มันเยี่ยมมาก! ขอบคุณ
RJ Uy

2

รุ่น Swift 3

  //This function trim only white space:
   func trim() -> String
        {
            return self.trimmingCharacters(in: CharacterSet.whitespaces)
        }
    //This function trim whitespeaces and new line that you enter:
     func trimWhiteSpaceAndNewLine() -> String
        {
            return self.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
        }


2

อีกคำตอบหนึ่งบางครั้งสตริงป้อนข้อมูลอาจมีช่องว่างระหว่างคำมากกว่าหนึ่งช่อง หากคุณต้องการสร้างมาตรฐานให้มีช่องว่างระหว่างคำเพียง 1 คำให้ลองใช้ (Swift 4/5)

let inputString = "  a very     strange   text !    "
let validInput = inputString.components(separatedBy:.whitespacesAndNewlines).filter { $0.count > 0 }.joined(separator: " ")

print(validInput) // "a very strange text !"

1

สำหรับฉันบรรทัดต่อไปนี้ใช้เพื่อลบพื้นที่สีขาว

let result = String(yourString.filter {![" ", "\t", "\n"].contains($0)})


-1

คำตอบของ BadmintonCat เวอร์ชั่น Swift 3

extension String {
    func replace(_ string:String, replacement:String) -> String {
        return self.replacingOccurrences(of: string, with: replacement, options: NSString.CompareOptions.literal, range: nil)
    }

    func removeWhitespace() -> String {
        return self.replace(" ", replacement: "")
    }
}

ใช้งานได้เฉพาะกับ "" (ไม่พิจารณา whitesapce ประเภทอื่น)
fpg1503

เพราะคำตอบของคุณผิด คำตอบที่คุณให้ไว้กับการอัปเดตนั้นไม่ถูกต้องเช่นกัน มีช่องว่างหลายประเภทและนั่นคือสาเหตุที่การใช้งานwhitespaceCharacterSetเป็นวิธีปฏิบัติที่ดีที่สุด
fpg1503

-1
class SpaceRemover
{
    func SpaceRemover(str :String)->String
    {
        var array = Array(str)
        var i = array.count
        while(array.last == " ")
        {
            var array1 = [Character]()
            for item in  0...i - 1
            {
                array1.append(array[item])
            }
            i = i - 1
            array = array1
            print(array1)
            print(array)

        }

        var arraySecond = array
        var j = arraySecond.count

        while(arraySecond.first == " ")
        {
            var array2 = [Character]()
            if j > 1
            {
                for item in 1..<j
                {
                    array2.append(arraySecond[item])
                }
            }
            j = j - 1
            arraySecond = array2
            print(array2)
            print(arraySecond)

        }
        print(arraySecond)
        return String(arraySecond)
    }
}

-2

ในการลบช่องว่างทั้งหมดออกจากสตริง:

let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))!
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.