15 ответов:
ответ обновлено для Swift 4. Если вы все еще используете 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: "+")или если вы ищете более быстрое решение, которое не использует API от NSString, вы можете использовать это.
let aString = "Some search text" let replaced = String(aString.map { == " " ? "+" : })
вы можете использовать это:
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) } }Swift 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 Решение
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)
Swift 4:
let abc = "Hello world" let result = abc.replacingOccurrences(of: " ", with: "_", options: NSString.CompareOptions.literal, range:nil) print(result :\(result))выход:
result : Hello_world
быстрое решение 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 { 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:"+")
категория, которая изменяет существующую изменяемую строку:
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 решение на основе Рамис' ответ:
extension String { func withReplacedCharacters(_ characters: String, by separator: String) -> String { let characterSet = CharacterSet(charactersIn: characters) return components(separatedBy: characterSet).joined(separator: separator) } }попытался придумать подходящее имя функции в соответствии с Соглашением об именовании Swift 3.
вот пример для Swift 3:
var stringToReplace = "This my string" if let range = stringToReplace.range(of: "my") { stringToReplace?.replaceSubrange(range, with: "your") }
вот расширение для вхождений на месте заменить метод на
String, что не делает никакой ненужной копии и делает все на месте:extension String { mutating func replaceOccurrences(of target: String, with replacement: String, options: String.CompareOptions = [], locale: Locale? = nil) { var range: Range<String.Index>? repeat { range = self.range(of: source, options: options, range: range.map { .lowerBound..<self.endIndex }, locale: locale) if let range = range { self.replaceSubrange(range, with: new) } } while range != nil } }(сигнатура метода также имитирует сигнатуру встроенного
String.replacingOccurrences()способ)может использоваться следующим образом:
var string = "this is a string" string.replaceOccurrences(of: " ", with: "_") print(string) // "this_is_a_string"
если вы не хотите использовать цель-C
NSStringметоды, вы можете просто использоватьsplitиjoin:var string = "This is my string" string = join("+", split(string, isSeparator: { == " " }))
split(string, isSeparator: { == " " })возвращает массив строк (["This", "is", "my", "string"]).
joinсоединяет эти элементы с+, что приводит к желаемому результату:"This+is+my+string".
я реализовал эту очень простую функцию:
func convap (text : String) -> String { return text.stringByReplacingOccurrencesOfString("'", withString: "''") }вы можете написать так:
let sqlQuery = "INSERT INTO myTable (Field1, Field2) VALUES ('\(convap(value1))','\(convap(value2)')
Я думаю, что регулярное выражение является наиболее гибким и надежным способом:
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"
Swift расширение:
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в один проход сделать более одной замены.
Comments