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.
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:
extensionString{func removingLeadingSpaces()->String{guardlet index = firstIndex(where:{!CharacterSet(charactersIn:String($0)).isSubset(of:.whitespaces)})else{returnself}returnString(self[index...])}}
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/…
@ 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 ...
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:
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:
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:
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:
Saya akan menggunakan ekstensi ini, agar fleksibel dan meniru cara koleksi lain melakukannya:
extensionString{func filter(pred:Character->Bool)->String{var res =String()for c inself.characters {if pred(c){
res.append(c)}}return res
}}"this is a String".filter { $0!=Character(" ")}//"thisisaString"
//This function trim only white space:
func trim()->String{returnself.trimmingCharacters(in:CharacterSet.whitespaces)}//This function trim whitespeaces and new line that you enter:
func trimWhiteSpaceAndNewLine()->String{returnself.trimmingCharacters(in:CharacterSet.whitespacesAndNewlines)}
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 !"
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.
Jawaban:
Untuk menghapus spasi putih depan dan belakang:
Swift 3 / Swift 4:
sumber
NSCharacterSet.whitespaceAndNewlineCharacterSet()
jika Anda ingin memangkas karakter baris baru juga.Cara yang benar ketika Anda ingin menghapus semua jenis spasi putih (berdasarkan jawaban SO ini ) adalah:
Swift 3.0+ (3.0, 3.1, 3.2, 4.0)
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:
sumber
Ekstensi string ini menghapus semua spasi putih dari string, bukan hanya mengekor spasi putih ...
Contoh:
sumber
Cepat 3
Anda bisa menggunakan metode ini untuk menghapus semua spasi normal dalam sebuah string (tidak mempertimbangkan semua jenis spasi putih):
Hasilnya adalah:
sumber
Anda juga bisa menggunakan regex.
sumber
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:
Anda juga dapat membuat set karakter Anda sendiri untuk memotong batas-batas string Anda dengan, misalnya:
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:
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:
... 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:
sumber
Untuk swift 3.0
sumber
Cepat 4
Kasus terbaik untuk menggunakan regex:
sumber
Saya akan menggunakan ekstensi ini, agar fleksibel dan meniru cara koleksi lain melakukannya:
sumber
Jika Anda ingin menghapus spasi dari depan (dan belakang) tetapi tidak di tengah, Anda harus menggunakan
stringByTrimmingCharactersInSet
Jika Anda ingin menghapus spasi dari sembarang string, maka Anda mungkin ingin melihat stringByReplacing ...
sumber
" First Word "
output"First Word"
).Swift 4, 4.2 dan 5
Hapus ruang dari depan dan akhir saja
Hapus spasi dari setiap tempat di string
sumber
Anda dapat mencoba ini juga
sumber
Coba pemrograman fungsional untuk menghilangkan spasi putih:
sumber
sumber
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.
dan hasilnya akan
sumber
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:
Metode 2:
sumber
Versi Swift 3
sumber
Memotong ruang putih di Swift 4
sumber
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)
sumber
Bagi saya, baris berikut digunakan untuk menghilangkan spasi.
sumber
sumber
Swift 3 versi jawaban BadmintonCat
sumber
whitespaceCharacterSet
adalah praktik terbaik.sumber
Untuk menghapus semua spasi dari string:
sumber