Bagaimana saya harus menghapus semua spasi utama dari string? - cepat


Jawaban:


380

Untuk menghapus spasi putih depan dan belakang:

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

Swift 3 / Swift 4:

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

180
ini hanya akan bekerja untuk memimpin dan mengikuti spasi putih. ini tidak akan menghapus spasi putih yang terkandung dalam string.
matahari

87
jika Anda ingin menghapus semua ruang kosong, Anda dapat mencoba myString.stringByReplacingOccurrencesOfString ("", withString: "")
Lucas

6
Anda juga dapat menggunakan NSCharacterSet.whitespaceAndNewlineCharacterSet()jika Anda ingin memangkas karakter baris baru juga.
Blip

2
Untuk membuatnya bekerja dengan Swift 3.0 dan juga menghapus spasi putih di antara string, gunakan jawaban: stackoverflow.com/a/39067610/4886069

2
Pengguna Swift 3+: yourString.replacingOccurrences (dari: "", dengan: "")
Nadeesha Lakmal

144

Cara yang benar ketika Anda ingin menghapus semua jenis spasi putih (berdasarkan jawaban SO ini ) adalah:

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()
    }
}

EDIT

Jawaban ini diposting ketika pertanyaannya adalah tentang menghapus semua spasi putih, pertanyaan diedit untuk hanya menyebutkan spasi putih terkemuka. Jika Anda hanya ingin menghapus spasi putih terkemuka gunakan yang berikut ini:

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
juga .components (dipisahkan oleh: .whitespacesAndNewlines) untuk baris baru juga
Derek

Ini seharusnya bukan sebuah fungsi
Jakub Truhlář

1
Karena logika fitur . Anda membuat properti terhitung ketika Anda harus membuat fungsi . Ini melakukan smt daripada memegang nilai atau menghitungnya dari yang lain. Lihatlah: stackoverflow.com/questions/24035276/…
Jakub Truhlář

4
@ JakubTruhlář - Itu masalah pendapat, bukan pernyataan fakta. Lihat softwareengineering.stackexchange.com/questions/304077/…
Ashley Mills

1
@ JakubTruhlář Anda mengatakan "Ini harus menjadi func bukan var" - ini terdengar sangat seperti Anda menyatakan fakta, bukan pendapat Anda. Jika Anda membaca jawaban untuk pertanyaan terkait, Anda akan melihat bahwa sementara itu "masuk akal" untuk Anda, untuk orang lain ... belum tentu.
Ashley Mills

82

Ekstensi string ini menghapus semua spasi putih dari string, bukan hanya mengekor spasi putih ...

 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: "")
    }
  }

Contoh:

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

4
Hanya bekerja untuk "" (tidak mempertimbangkan jenis whitesapce lainnya)
fpg1503

@ fpg1503 jenis ruang putih apa?
Ricardo

Yang didefinisikan pada kategori Zs: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503

45

Cepat 3

Anda bisa menggunakan metode ini untuk menghapus semua spasi normal dalam sebuah string (tidak mempertimbangkan semua jenis spasi putih):

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

Hasilnya adalah:

HelloWorld!

1
Hanya bekerja untuk "" (tidak mempertimbangkan jenis whitesapce lainnya)
fpg1503

@Greg Anda masih kehilangan 16 karakter lain: fileformat.info/info/unicode/category/Zs/list.htm
fpg1503

18

Anda juga bisa menggunakan regex.

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

Swift 4: myString.replacingOccurrences (dari: "\\ s", dengan: "", opsi: NSString.CompareOptions.
RegularExpression

16

Untuk Swift 3.0+ lihat jawaban lainnya. Ini sekarang jawaban warisan untuk Swift 2.x

Seperti yang dijawab di atas, karena Anda tertarik untuk menghapus karakter pertama, metode instance .stringByTrimmingCharactersInSet () akan bekerja dengan baik:

myString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

Anda juga dapat membuat set karakter Anda sendiri untuk memotong batas-batas string Anda dengan, misalnya:

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

Ada juga metode built in instance untuk menangani menghapus atau mengganti substring yang disebut stringByReplacingOccurrencesOfString (target: String, replacement: String) . Ini dapat menghapus spasi atau pola lain yang terjadi di string Anda

Anda dapat menentukan opsi dan rentang, tetapi tidak perlu:

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

Ini adalah cara mudah untuk menghapus atau mengganti pola karakter berulang dalam string Anda, dan dapat dirantai, meskipun setiap kali melewatinya harus melewati lagi seluruh string Anda, mengurangi efisiensi. Jadi Anda bisa melakukan ini:

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

... tapi itu akan memakan waktu dua kali lebih lama.

.stringByReplacingOccurrencesOfString () dokumentasi dari situs Apple

Merangkai metode instance String ini kadang-kadang bisa sangat nyaman untuk konversi satu kali, misalnya jika Anda ingin mengubah gumpalan NSData pendek menjadi string hex tanpa spasi dalam satu baris, Anda dapat melakukan ini dengan interpolasi string bawaan Swift dan beberapa pemangkasan dan mengganti:

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

Hanya bekerja untuk "" (tidak mempertimbangkan jenis whitesapce lainnya)
fpg1503

Masih tidak mempertimbangkan jenis ruang putih lain di tengah-tengah String
fpg1503

12

Untuk swift 3.0

import Foundation

var str = " Hear me calling"

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

str.stringByRemovingWhitespaces  // Hearmecalling

8

Cepat 4

Kasus terbaik untuk menggunakan regex:

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

// thisiswrongcontainedteeext

7

Saya akan menggunakan ekstensi ini, agar fleksibel dan meniru cara koleksi lain melakukannya:

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"

Hanya bekerja untuk "" (tidak mempertimbangkan jenis whitesapce lainnya)
fpg1503

6

Jika Anda ingin menghapus spasi dari depan (dan belakang) tetapi tidak di tengah, Anda harus menggunakan stringByTrimmingCharactersInSet

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

Jika Anda ingin menghapus spasi dari sembarang string, maka Anda mungkin ingin melihat stringByReplacing ...


Bagaimana cara menghapus ruang tengah juga?
Nikhil Gupta

@NikhilGupta tidak, hanya memimpin dan mengekor (contoh " First Word "output "First Word").
fpg1503

6

Swift 4, 4.2 dan 5

Hapus ruang dari depan dan akhir saja

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

Hapus spasi dari setiap tempat di string

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

3

Anda dapat mencoba ini juga

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

Hanya bekerja untuk "" (tidak mempertimbangkan jenis whitesapce lainnya)
fpg1503

3

Coba pemrograman fungsional untuk menghilangkan spasi putih:

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

Jika ada yang menghapus ruang ekstra dari string misalnya = "This is the demo text remove extra space between the words."

Anda dapat menggunakan Fungsi ini di 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
}

dan hasilnya akan

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

3

Hai ini mungkin terlambat tetapi patut dicoba. Ini dari file taman bermain. Anda dapat menjadikannya ekstensi String.

Ini ditulis dalam Swift 5.3

Metode 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       "

Metode 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       "

Ini untuk Swift 5.x
Kyle Emmanuel

Ini bagus! Terima kasih
RJ Uy

2

Versi 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

Memotong ruang putih di Swift 4

let strFirstName = txtFirstName.text?.trimmingCharacters(in: 
 CharacterSet.whitespaces)

2

Namun jawaban lain, kadang-kadang string input dapat berisi lebih dari satu spasi di antara kata-kata. Jika Anda perlu membuat standar untuk hanya memiliki 1 spasi di antara kata-kata, coba ini (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

Bagi saya, baris berikut digunakan untuk menghilangkan spasi.

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


-1

Swift 3 versi jawaban BadmintonCat

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: "")
    }
}

Hanya bekerja untuk "" (tidak mempertimbangkan jenis whitesapce lainnya)
fpg1503

Karena jawaban Anda salah. Jawaban yang Anda berikan pembaruan juga salah. Ada beberapa jenis spasi putih dan itulah mengapa menggunakan whitespaceCharacterSetadalah praktik terbaik.
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

Untuk menghapus semua spasi dari string:

let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))!
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.