let aString ="This is my string"let newString = aString.replacingOccurrences(of:" ", with:"+", options:.literal, range:nil)
Dan seperti yang dicatat oleh @cprcrack di bawah ini, optionsdan rangeparameter adalah opsional, jadi jika Anda tidak ingin menentukan opsi perbandingan string atau rentang untuk melakukan penggantian di dalamnya, Anda hanya perlu yang berikut ini.
let aString ="This is my string"let newString = aString.replacingOccurrences(of:" ", with:"+")
Atau, jika data dalam format tertentu seperti ini, di mana Anda hanya mengganti karakter pemisah, Anda dapat menggunakan components()untuk memecah string menjadi dan array, dan kemudian Anda dapat menggunakan join()fungsi untuk menempatkan mereka kembali bersama-sama dengan pemisah yang ditentukan .
let toArray = aString.components(separatedBy:" ")let backToString = toArray.joined(separator:"+")
Atau jika Anda mencari solusi Swifty yang tidak menggunakan API dari NSString, Anda bisa menggunakan ini.
pengganti swift2 yang bagus untuk stringByReplacingOccurrencesOfString
rjb101
Saya tidak tahu apakah saya melakukan sesuatu yang salah tetapi solusi 2.0 cepat kedua membuat saya dengan dan string opsional. String Asli terlihat seperti ini: "x86_64"dan pemetaan baru terlihat seperti"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
John Shelley
7
Bagi siapa pun yang memiliki masalah dengan menggunakan stringByReplacingOccurrencesOfStringdi Swift 2, Anda harus import Foundationdapat menggunakan metode itu.
Liron Yahdav
1
wow, stringDengan menggantiOursiOfString, betapa intuitif! Saya mengharapkan sesuatu seperti makeNewStringByReplacingOccurrencesOfFirstArgumentByValueInSecondArgument
Novellizator
64
Anda bisa menggunakan ini:
let s ="This is my string"let modified = s.replace(" ", withString:"+")
Jika Anda menambahkan metode ekstensi ini di mana saja dalam kode Anda:
Saya tidak akan memberi nama fungsi "ganti" karena ini menyarankan itu bermutasi variabel. Gunakan tata bahasa yang sama seperti yang dilakukan Apple. Menyebutnya "mengganti (_: withString :)" membuatnya lebih jelas. Fungsi mutasi "ganti" yang akan datang juga akan konflik dalam penamaan.
Sunkas
57
Solusi Swift 3, Swift 4, Swift 5
let exampleString ="Example string"//Solution suggested above in Swift 3.0
let stringToArray = exampleString.components(separatedBy:" ")let stringFromArray = stringToArray.joined(separator:"+")//Swiftiest solution
let swiftyString = exampleString.replacingOccurrences(of:" ", with:"+")
Ini adalah solusi yang saya sukai, karena memungkinkan Anda mengganti beberapa karakter sekaligus.
Insinerator
4
Kurang terjadi pada saya, saya hanya ingin mengubah (kata atau karakter) di String
Jadi saya sudah menggunakan Dictionary
extensionString{func replace(_ dictionary:[String:String])->String{var result =String()var i =-1for(of , with):(String,String)in dictionary{
i +=1if i<1{
result =self.replacingOccurrences(of: of, with: with)}else{
result = result.replacingOccurrences(of: of, with: with)}}return result
}}
pemakaian
let mobile ="+1 (800) 444-9999"let dictionary =["+":"00"," ":"","(":"",")":"","-":""]let mobileResult = mobile.replace(dictionary)
print(mobileResult)//001800444999
Lanjutkan dan gunakan seperti let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
Kecepatan fungsi adalah sesuatu yang sulit saya banggakan, tetapi Anda dapat melewati array Stringdalam satu pass untuk membuat lebih dari satu penggantian.
Berikut ini adalah ekstensi untuk menggantikan metode kejadian di tempat String, yang tidak memiliki salinan yang tidak perlu dan melakukan semuanya di tempat:
extensionString{mutatingfunc replaceOccurrences<Target:StringProtocol,Replacement:StringProtocol>(of target:Target, with replacement:Replacement, options:String.CompareOptions=[], locale:Locale?=nil){var range:Range<Index>?repeat{
range =self.range(of: target, options: options, range: range.map {self.index($0.lowerBound, offsetBy: replacement.count)..<self.endIndex }, locale: locale)iflet range = range {self.replaceSubrange(range, with: replacement)}}while range !=nil}}
(Tanda tangan metode juga meniru tanda tangan dari String.replacingOccurrences()metode bawaan)
Dapat digunakan dengan cara berikut:
var string ="this is a string"
string.replaceOccurrences(of:" ", with:"_")
print(string)//"this_is_a_string"
Jawaban:
Jawaban ini telah diperbarui untuk Swift 4 & 5 . Jika Anda masih menggunakan Swift 1, 2 atau 3 lihat riwayat revisi.
Anda memiliki dua pilihan. Anda dapat melakukan seperti yang disarankan dan digunakan @jaumard
replacingOccurrences()
Dan seperti yang dicatat oleh @cprcrack di bawah ini,
options
danrange
parameter adalah opsional, jadi jika Anda tidak ingin menentukan opsi perbandingan string atau rentang untuk melakukan penggantian di dalamnya, Anda hanya perlu yang berikut ini.Atau, jika data dalam format tertentu seperti ini, di mana Anda hanya mengganti karakter pemisah, Anda dapat menggunakan
components()
untuk memecah string menjadi dan array, dan kemudian Anda dapat menggunakanjoin()
fungsi untuk menempatkan mereka kembali bersama-sama dengan pemisah yang ditentukan .Atau jika Anda mencari solusi Swifty yang tidak menggunakan API dari NSString, Anda bisa menggunakan ini.
sumber
"x86_64"
dan pemetaan baru terlihat seperti"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
stringByReplacingOccurrencesOfString
di Swift 2, Anda harusimport Foundation
dapat menggunakan metode itu.Anda bisa menggunakan ini:
Jika Anda menambahkan metode ekstensi ini di mana saja dalam kode Anda:
Swift 3:
sumber
Solusi Swift 3, Swift 4, Swift 5
sumber
Apakah Anda menguji ini:
sumber
Swift 4:
Keluaran:
sumber
Saya menggunakan ekstensi ini:
Pemakaian:
sumber
Solusi Swift 3 di sepanjang lini Sunkas:
Menggunakan:
Keluaran:
sumber
Kategori yang mengubah String yang dapat berubah yang ada:
Menggunakan:
sumber
Solusi Swift 3 berdasarkan jawaban Ramis :
Mencoba menampilkan nama fungsi yang sesuai dengan konvensi penamaan Swift 3.
sumber
Kurang terjadi pada saya, saya hanya ingin mengubah (kata atau karakter) di
String
Jadi saya sudah menggunakan
Dictionary
pemakaian
sumber
replace
sumber
replacingOccurrences
diString
?Saya pikir Regex adalah cara yang paling fleksibel dan solid:
sumber
Ekstensi cepat:
Lanjutkan dan gunakan seperti
let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
Kecepatan fungsi adalah sesuatu yang sulit saya banggakan, tetapi Anda dapat melewati array
String
dalam satu pass untuk membuat lebih dari satu penggantian.sumber
Berikut adalah contoh untuk Swift 3:
sumber
Ini mudah di swift 4.2. gunakan saja
replacingOccurrences(of: " ", with: "_")
untuk gantisumber
Xcode 11 • Swift 5.1
Metode mutasi dari StringProtocol
replacingOccurrences
dapat diimplementasikan sebagai berikut:sumber
Jika Anda tidak ingin menggunakan metode Objective-C
NSString
, Anda bisa menggunakansplit
danjoin
:split(string, isSeparator: { $0 == " " })
mengembalikan array string (["This", "is", "my", "string"]
).join
bergabung elemen-elemen ini dengan+
, menghasilkan output yang diinginkan:"This+is+my+string"
.sumber
Saya telah mengimplementasikan fungsi yang sangat sederhana ini:
Jadi, Anda dapat menulis:
sumber
Anda dapat menguji ini:
biarkan newString = test.stringByReplacingOccurrencesOfString ("", withString: "+", opsi: nil, rentang: nil)
sumber
Berikut ini adalah ekstensi untuk menggantikan metode kejadian di tempat
String
, yang tidak memiliki salinan yang tidak perlu dan melakukan semuanya di tempat:(Tanda tangan metode juga meniru tanda tangan dari
String.replacingOccurrences()
metode bawaan)Dapat digunakan dengan cara berikut:
sumber