Этот ответ был обновлен для Swift 4 и 5 . Если вы все еще используете 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, вы можете использовать это.
параметры и параметры диапазона являются необязательными
cprcrack
1
отличная замена swift2 для stringByReplacingOccurferencesOfString
rjb101
Я не знаю, делаю ли я что-то не так, но второе быстрое решение 2.0 оставляет меня с необязательной строкой. Оригинальная строка выглядит следующим образом: "x86_64"а новое отображение выглядит как"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
Джон Шелли
7
Для тех, у кого были проблемы с использованием stringByReplacingOccurrencesOfStringв Swift 2, вам нужно import Foundationиметь возможность использовать этот метод.
Лирон Яхдав
1
вау, stringByReplacingOccurferencesOfString, как интуитивно понятно! Я что - то вроде makeNewStringByReplacingOccurrencesOfFirstArgumentByValueInSecondArgument ожидал
Novellizator
64
Вы можете использовать это:
let s ="This is my string"let modified = s.replace(" ", withString:"+")
Если вы добавите этот метод расширения в любом месте вашего кода:
Я бы не назвал функцию «заменить», поскольку это предполагает, что она изменяет переменную. Используйте ту же грамматику, что и в Apple. Называя его «замена (_: withString :)», становится намного понятнее. Будущая мутирующая функция «замены» также будет конфликтовать в именовании.
Sunkas
57
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:"+")
Это мое предпочтительное решение, поскольку оно позволяет заменять несколько символов одновременно.
мусоросжигатель
4
Меньше случилось со мной, я просто хочу изменить (слово или символ) в String
Так что я использую 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
}}
Применение
let mobile ="+1 (800) 444-9999"let dictionary =["+":"00"," ":"","(":"",")":"","-":""]let mobileResult = mobile.replace(dictionary)
print(mobileResult)//001800444999
Ответы:
Этот ответ был обновлен для Swift 4 и 5 . Если вы все еще используете Swift 1, 2 или 3, просмотрите историю изменений.
У вас есть несколько вариантов. Вы можете сделать, как предложил @jaumard, и использовать
replacingOccurrences()
И как отметил @cprcrack ниже,
options
иrange
параметры не являются обязательными, так что если вы не хотите , чтобы указать параметры сравнения строк или диапазон , чтобы сделать замену внутри, вам нужно только следующее.Или, если данные находятся в определенном формате, подобном этому, где вы просто заменяете разделительные символы, вы можете использовать,
components()
чтобы разбить строку на массив и массив, а затем вы можете использоватьjoin()
функцию, чтобы вернуть их обратно вместе с указанным разделителем. ,Или, если вы ищете более простое решение Swifty, которое не использует API от NSString, вы можете использовать это.
источник
"x86_64"
а новое отображение выглядит как"Optional([\"x\", \"8\", \"6\", \"_\", \"6\", \"4\"])"
stringByReplacingOccurrencesOfString
в Swift 2, вам нужноimport Foundation
иметь возможность использовать этот метод.Вы можете использовать это:
Если вы добавите этот метод расширения в любом месте вашего кода:
Свифт 3:
источник
Swift 3, Swift 4, Swift 5 Solution
источник
Вы проверяли это:
источник
Свифт 4:
Вывод:
источник
Я использую это расширение:
Применение:
источник
Решение Swift 3 по аналогии с Sunkas:
Использование:
Вывод:
источник
Категория, которая изменяет существующую изменяемую строку:
Использование:
источник
Решение Swift 3 основано на ответе Рамиса :
Попытался придумать подходящее имя функции в соответствии с соглашением об именах Swift 3.
источник
Меньше случилось со мной, я просто хочу изменить (слово или символ) в
String
Так что я использую
Dictionary
Применение
источник
replace
источник
replacingOccurrences
вString
?Я думаю, что Regex - самый гибкий и надежный способ:
источник
Быстрое расширение:
Иди и используй это как
let replacedString = yorString.stringByReplacing(replaceStrings: [" ","?","."], with: "+")
Скорость этой функции - это то, чем я могу гордиться, но вы можете передать массив за
String
один проход, чтобы сделать более одной замены.источник
Вот пример для Swift 3:
источник
Это легко и быстро. 4.2. просто использовать
replacingOccurrences(of: " ", with: "_")
для заменыисточник
Xcode 11 • Swift 5.1
Метод мутации StringProtocol
replacingOccurrences
может быть реализован следующим образом:источник
Если вы не хотите использовать
NSString
методы Objective-C , вы можете просто использоватьsplit
иjoin
:split(string, isSeparator: { $0 == " " })
возвращает массив строк (["This", "is", "my", "string"]
).join
соединяет эти элементы с+
, в результате чего желаемого результата:"This+is+my+string"
.источник
Я реализовал эту очень простую функцию:
Таким образом, вы можете написать:
источник
Вы можете проверить это:
let newString = test.stringByReplacingOccurferencesOfString ("", withString: "+", параметры: ноль, диапазон: ноль)
источник
Вот расширение для метода замены вхождений на месте
String
, который не создает ненужной копии и делает все на месте:(Сигнатура метода также имитирует сигнатуру встроенного
String.replacingOccurrences()
метода)Может использоваться следующим образом:
источник