Saya mencari cara untuk mengganti karakter dalam Swift String
.
Contoh: "Ini tali saya"
Saya ingin mengganti "" dengan "+" untuk mendapatkan "+ ini + string + saya".
Bagaimana saya bisa mencapai ini?
Saya mencari cara untuk mengganti karakter dalam Swift String
.
Contoh: "Ini tali saya"
Saya ingin mengganti "" dengan "+" untuk mendapatkan "+ ini + string + saya".
Bagaimana saya bisa mencapai ini?
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 @jaumardreplacingOccurrences()
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, options
dan range
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.
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.
let aString = "Some search text"
let replaced = String(aString.map {
$0 == " " ? "+" : $0
})
"x86_64"
dan pemetaan baru terlihat seperti"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
stringByReplacingOccurrencesOfString
di Swift 2, Anda harus import Foundation
dapat menggunakan metode itu.
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:
extension String
{
func replace(target: String, withString: String) -> String
{
return self.stringByReplacingOccurrencesOfString(target, withString: withString, options: NSStringCompareOptions.LiteralSearch, range: nil)
}
}
Swift 3:
extension String
{
func replace(target: String, withString: String) -> String
{
return self.replacingOccurrences(of: target, with: withString, options: NSString.CompareOptions.literal, range: nil)
}
}
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: "+")
Saya menggunakan ekstensi ini:
extension String {
func replaceCharacters(characters: String, toSeparator: String) -> String {
let characterSet = NSCharacterSet(charactersInString: characters)
let components = self.componentsSeparatedByCharactersInSet(characterSet)
let result = components.joinWithSeparator("")
return result
}
func wipeCharacters(characters: String) -> String {
return self.replaceCharacters(characters, toSeparator: "")
}
}
Pemakaian:
let token = "<34353 43434>"
token.replaceCharacters("< >", toString:"+")
Solusi Swift 3 di sepanjang lini Sunkas:
extension String {
mutating func replace(_ originalString:String, with newString:String) {
self = self.replacingOccurrences(of: originalString, with: newString)
}
}
Menggunakan:
var string = "foo!"
string.replace("!", with: "?")
print(string)
Keluaran:
foo?
Kategori yang mengubah String yang dapat berubah yang ada:
extension String
{
mutating func replace(originalString:String, withString newString:String)
{
let replacedString = self.stringByReplacingOccurrencesOfString(originalString, withString: newString, options: nil, range: nil)
self = replacedString
}
}
Menggunakan:
name.replace(" ", withString: "+")
Solusi Swift 3 berdasarkan jawaban Ramis :
extension String {
func withReplacedCharacters(_ characters: String, by separator: String) -> String {
let characterSet = CharacterSet(charactersIn: characters)
return components(separatedBy: characterSet).joined(separator: separator)
}
}
Mencoba menampilkan nama fungsi yang sesuai dengan konvensi penamaan Swift 3.
Kurang terjadi pada saya, saya hanya ingin mengubah (kata atau karakter) di String
Jadi saya sudah menggunakan Dictionary
extension String{
func replace(_ dictionary: [String: String]) -> String{
var result = String()
var i = -1
for (of , with): (String, String)in dictionary{
i += 1
if 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
replace
var str = "This is my string"
str = str.replacingOccurrences(of: " ", with: "+")
print(str)
replacingOccurrences
di String
?
Saya pikir Regex adalah cara yang paling fleksibel dan solid:
var str = "This is my string"
let regex = try! NSRegularExpression(pattern: " ", options: [])
let output = regex.stringByReplacingMatchesInString(
str,
options: [],
range: NSRange(location: 0, length: str.characters.count),
withTemplate: "+"
)
// output: "This+is+my+string"
Ekstensi cepat:
extension String {
func stringByReplacing(replaceStrings set: [String], with: String) -> String {
var stringObject = self
for string in set {
stringObject = self.stringByReplacingOccurrencesOfString(string, withString: with)
}
return stringObject
}
}
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.
Berikut adalah contoh untuk Swift 3:
var stringToReplace = "This my string"
if let range = stringToReplace.range(of: "my") {
stringToReplace?.replaceSubrange(range, with: "your")
}
Xcode 11 • Swift 5.1
Metode mutasi dari StringProtocol replacingOccurrences
dapat diimplementasikan sebagai berikut:
extension RangeReplaceableCollection where Self: StringProtocol {
mutating func replaceOccurrences<Target: StringProtocol, Replacement: StringProtocol>(of target: Target, with replacement: Replacement, options: String.CompareOptions = [], range searchRange: Range<String.Index>? = nil) {
self = .init(replacingOccurrences(of: target, with: replacement, options: options, range: searchRange))
}
}
var name = "This is my string"
name.replaceOccurrences(of: " ", with: "+")
print(name) // "This+is+my+string\n"
Jika Anda tidak ingin menggunakan metode Objective-C NSString
, Anda bisa menggunakan split
dan join
:
var string = "This is my string"
string = join("+", split(string, isSeparator: { $0 == " " }))
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"
.
Saya telah mengimplementasikan fungsi yang sangat sederhana ini:
func convap (text : String) -> String {
return text.stringByReplacingOccurrencesOfString("'", withString: "''")
}
Jadi, Anda dapat menulis:
let sqlQuery = "INSERT INTO myTable (Field1, Field2) VALUES ('\(convap(value1))','\(convap(value2)')
Anda dapat menguji ini:
biarkan newString = test.stringByReplacingOccurrencesOfString ("", withString: "+", opsi: nil, rentang: nil)
Berikut ini adalah ekstensi untuk menggantikan metode kejadian di tempat String
, yang tidak memiliki salinan yang tidak perlu dan melakukan semuanya di tempat:
extension String {
mutating func 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)
if let 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"