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

170

Saya perlu cara untuk menghapus karakter pertama dari string yang merupakan spasi. Saya mencari metode atau bahkan ekstensi untuk tipe String yang dapat saya gunakan untuk memotong karakter string.

dhruvm
sumber
8
Apakah Anda ingin menghapus karakter spasi pertama atau semua karakter spasi dalam string?
Alex
1
Kemungkinan duplikat: Hapus set karakter spasi dari string tidak termasuk spasi .
Imanou Petit

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)
Alex
sumber
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...])
    }
}
fpg1503
sumber
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.
Kucing Bulu Tangkis
sumber
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!
Mykyta Savchuk
sumber
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)
mohonish
sumber
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: "")
Air Bukan Kata-kata
sumber
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
Dharmesh Kheni
sumber
8

Cepat 4

Kasus terbaik untuk menggunakan regex:

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

// thisiswrongcontainedteeext
dimpiax
sumber
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"
Jean-Philippe Pellet
sumber
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 ...

Jeremy Pope
sumber
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: "")
Akbar Khan
sumber
3

Anda dapat mencoba ini juga

   let updatedString = searchedText?.stringByReplacingOccurrencesOfString(" ", withString: "-")
Avinash Mishra
sumber
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(" ") }
  }
}
Yi Gu
sumber
3
extension String {

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

    func removing(_ forbiddenCharacters: CharacterSet) -> String {
        return String(unicodeScalars.filter({ !forbiddenCharacters.contains($0) }))
    }
}
Oliver Pearmain
sumber
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."
Gurinder Batth
sumber
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       "
lexlab
sumber
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)
        }
NemSothea
sumber
2

Memotong ruang putih di Swift 4

let strFirstName = txtFirstName.text?.trimmingCharacters(in: 
 CharacterSet.whitespaces)
Mahesh Chaudhari
sumber
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 !"
Duyen-Hoa
sumber
1

Bagi saya, baris berikut digunakan untuk menghilangkan spasi.

let result = String(yourString.filter {![" ", "\t", "\n"].contains($0)})
ssowri1
sumber
1
string = string.filter ({!" ".contains($0) })
Fahim Rahman
sumber
-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: "")
    }
}
adougies
sumber
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)
    }
}
Rakesh Vaniyen
sumber
-2

Untuk menghapus semua spasi dari string:

let space_removed_string = (yourstring?.components(separatedBy: " ").joined(separator: ""))!
Ram Madhavan
sumber