String
ฉันกำลังมองหาวิธีการแทนที่ตัวอักษรในรวดเร็ว
ตัวอย่าง: "นี่คือสตริงของฉัน"
ฉันต้องการแทนที่ "" ด้วย "+" เพื่อรับ "This + is + my + string"
ฉันจะบรรลุสิ่งนี้ได้อย่างไร
String
ฉันกำลังมองหาวิธีการแทนที่ตัวอักษรในรวดเร็ว
ตัวอย่าง: "นี่คือสตริงของฉัน"
ฉันต้องการแทนที่ "" ด้วย "+" เพื่อรับ "This + is + my + string"
ฉันจะบรรลุสิ่งนี้ได้อย่างไร
คำตอบ:
คำตอบนี้ได้รับการปรับปรุงสำหรับ Swift 4 และ 55 หากคุณยังคงใช้งาน Swift 1, 2 หรือ 3 ดูประวัติการแก้ไข
คุณมีสองทางเลือก คุณสามารถทำตาม @jaumard แนะนำและใช้replacingOccurrences()
let aString = "This is my string"
let newString = aString.replacingOccurrences(of: " ", with: "+", options: .literal, range: nil)
และตามที่บันทึกไว้โดย @cprcrack ด้านล่างoptions
และrange
พารามิเตอร์เป็นทางเลือกดังนั้นหากคุณไม่ต้องการระบุตัวเลือกการเปรียบเทียบสตริงหรือช่วงที่จะทำการแทนที่ภายในคุณจำเป็นต้องมีสิ่งต่อไปนี้เท่านั้น
let aString = "This is my string"
let newString = aString.replacingOccurrences(of: " ", with: "+")
หรือถ้าข้อมูลอยู่ในรูปแบบเฉพาะเช่นนี้ซึ่งคุณเพียงแค่แทนที่อักขระการแยกคุณสามารถใช้components()
เพื่อแยกสตริงเป็นและอาร์เรย์จากนั้นคุณสามารถใช้join()
ฟังก์ชันเพื่อนำกลับมารวมกับตัวคั่นที่ระบุ .
let toArray = aString.components(separatedBy: " ")
let backToString = toArray.joined(separator: "+")
หรือถ้าคุณกำลังมองหาโซลูชัน Swifty ที่ไม่ได้ใช้ API จาก NSString คุณสามารถใช้มันได้
let aString = "Some search text"
let replaced = String(aString.map {
$0 == " " ? "+" : $0
})
"x86_64"
และการแมปใหม่มีลักษณะดังนี้"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
stringByReplacingOccurrencesOfString
ในการใช้งานSwift 2 คุณต้องimport Foundation
สามารถใช้วิธีการนั้นได้
คุณสามารถใช้สิ่งนี้:
let s = "This is my string"
let modified = s.replace(" ", withString:"+")
หากคุณเพิ่มวิธีการขยายนี้ทุกที่ในรหัสของคุณ:
extension String
{
func replace(target: String, withString: String) -> String
{
return self.stringByReplacingOccurrencesOfString(target, withString: withString, options: NSStringCompareOptions.LiteralSearch, range: nil)
}
}
สวิฟท์ 3:
extension String
{
func replace(target: String, withString: String) -> String
{
return self.replacingOccurrences(of: target, with: withString, options: NSString.CompareOptions.literal, range: nil)
}
}
Swift 3, Swift 4, Swift 5 Solution
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: "+")
คุณทดสอบสิ่งนี้หรือไม่:
var test = "This is my string"
let replaced = test.stringByReplacingOccurrencesOfString(" ", withString: "+", options: nil, range: nil)
สวิฟท์ 4:
let abc = "Hello world"
let result = abc.replacingOccurrences(of: " ", with: "_",
options: NSString.CompareOptions.literal, range:nil)
print(result :\(result))
เอาท์พุท:
result : Hello_world
ฉันใช้ส่วนขยายนี้:
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: "")
}
}
การใช้งาน:
let token = "<34353 43434>"
token.replaceCharacters("< >", toString:"+")
โซลูชัน Swift 3 ตามแนวของ Sunkas:
extension String {
mutating func replace(_ originalString:String, with newString:String) {
self = self.replacingOccurrences(of: originalString, with: newString)
}
}
ใช้:
var string = "foo!"
string.replace("!", with: "?")
print(string)
เอาท์พุท:
foo?
หมวดหมู่ที่แก้ไขสตริงที่ไม่แน่นอนที่มีอยู่:
extension String
{
mutating func replace(originalString:String, withString newString:String)
{
let replacedString = self.stringByReplacingOccurrencesOfString(originalString, withString: newString, options: nil, range: nil)
self = replacedString
}
}
ใช้:
name.replace(" ", withString: "+")
โซลูชัน Swift 3 ขึ้นอยู่กับคำตอบของ Ramis :
extension String {
func withReplacedCharacters(_ characters: String, by separator: String) -> String {
let characterSet = CharacterSet(charactersIn: characters)
return components(separatedBy: characterSet).joined(separator: separator)
}
}
พยายามคิดชื่อฟังก์ชั่นที่เหมาะสมตามแบบแผนการตั้งชื่อ Swift 3
เกิดขึ้นกับฉันน้อยฉันแค่ต้องการเปลี่ยน (คำหรือตัวอักษร) ใน String
ดังนั้นฉันใช้ 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
}
}
การใช้
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
ในString
?
ฉันคิดว่า Regex เป็นวิธีที่ยืดหยุ่นและมั่นคงที่สุด:
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"
ส่วนขยายที่รวดเร็ว:
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
}
}
ไปและใช้มันเหมือน let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
ความเร็วของฟังก์ชั่นเป็นสิ่งที่ฉันแทบจะไม่ภาคภูมิใจ แต่คุณสามารถผ่านอาเรย์ของString
หนึ่งผ่านเพื่อทำการแทนที่มากกว่าหนึ่ง
นี่คือตัวอย่างสำหรับ Swift 3:
var stringToReplace = "This my string"
if let range = stringToReplace.range(of: "my") {
stringToReplace?.replaceSubrange(range, with: "your")
}
นี่เป็นเรื่องง่ายใน 4.2 ที่รวดเร็ว เพียงใช้replacingOccurrences(of: " ", with: "_")
สำหรับแทนที่
var myStr = "This is my string"
let replaced = myStr.replacingOccurrences(of: " ", with: "_")
print(replaced)
Xcode 11 • Swift 5.1
วิธีการกลายพันธุ์ของ StringProtocol replacingOccurrences
สามารถนำไปใช้ดังนี้:
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"
หากคุณไม่ต้องการใช้วิธีการ Objective-C NSString
คุณสามารถใช้split
และjoin
:
var string = "This is my string"
string = join("+", split(string, isSeparator: { $0 == " " }))
split(string, isSeparator: { $0 == " " })
ส่งกลับอาร์เรย์ของสตริง (["This", "is", "my", "string"]
)
join
รวมองค์ประกอบเหล่านี้ด้วย+
, ส่งผลให้ผลลัพธ์ที่ต้องการ: "This+is+my+string"
.
ฉันใช้งาน func ง่าย ๆ นี้:
func convap (text : String) -> String {
return text.stringByReplacingOccurrencesOfString("'", withString: "''")
}
ดังนั้นคุณสามารถเขียน:
let sqlQuery = "INSERT INTO myTable (Field1, Field2) VALUES ('\(convap(value1))','\(convap(value2)')
คุณสามารถทดสอบสิ่งนี้:
ให้ newString = test.stringByReplacingOccurrencesOfString ("", withString: "+", ตัวเลือก: ไม่มี, ช่วง: ไม่มี)
ต่อไปนี้เป็นส่วนขยายสำหรับวิธีการแทนที่แบบแทนที่String
โดยไม่ทำสำเนาที่ไม่จำเป็นและทำทุกอย่างแทน:
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
}
}
(ลายเซ็นวิธีการยังเลียนแบบลายเซ็นของString.replacingOccurrences()
วิธีการในตัวด้วย)
อาจใช้วิธีต่อไปนี้:
var string = "this is a string"
string.replaceOccurrences(of: " ", with: "_")
print(string) // "this_is_a_string"