Как добавить символ в определенный индекс в строке в Swift
У меня есть строка типа Swift:
var stringts:String = "3022513240"
Если я хочу изменить его на строку примерно так: "(302)-251-3240"
, я хочу добавить разделы в индекс 0, как это сделать?
В Objective-C это делается следующим образом:
NSMutableString *stringts = "3022513240";
[stringts insertString:@"(" atIndex:0];
Как это сделать в Swift?
Ответы
Ответ 1
Если вы объявляете его как NSMutableString
то это возможно, и вы можете сделать это следующим образом:
let str: NSMutableString = "3022513240)"
str.insert("(", at: 0)
print(str)
Выход:
(3022513240)
РЕДАКТИРОВАТЬ:
Если вы хотите добавить при запуске:
var str = "3022513240)"
str.insert("(", at: str.startIndex)
Если вы хотите добавить символ в последний индекс:
str.insert("(", at: str.endIndex)
И если вы хотите добавить по определенному индексу:
str.insert("(", at: str.index(str.startIndex, offsetBy: 2))
Ответ 2
Swift 3
Используйте собственный подход Swift:
var welcome = "hello"
welcome.insert("!", at: welcome.endIndex) // prints hello!
welcome.insert("!", at: welcome.startIndex) // prints !hello
welcome.insert("!", at: welcome.index(before: welcome.endIndex)) // prints hell!o
welcome.insert("!", at: welcome.index(after: welcome.startIndex)) // prints h!ello
welcome.insert("!", at: welcome.index(welcome.startIndex, offsetBy: 3)) // prints hel!lo
Если вам интересно узнать больше о Strings и производительности, посмотрите @ ниже.
Ответ 3
var myString = "hell"
let index = 4
let character = "o" as Character
myString.insert(
character, at:
myString.index(myString.startIndex, offsetBy: index)
)
print(myString) // "hello"
Осторожно: убедитесь, что index
больше или равен размеру строки, иначе вы получите сбой.
Ответ 4
var phone = "+9945555555"
var indx = phone.index(phone.startIndex, offsetBy: 4)
phone.insert("-", at: indx)
index = phone.index(phone.startIndex, offsetBy: 7)
phone.insert("-", at: indx)
//+ 994-55-55555
Ответ 5
Вы не можете, потому что в строковых индексах Swift (String.Index) определяется в терминах кластеров Unicode grapheme, так что он прекрасно обрабатывает все элементы Unicode. Таким образом, вы не можете напрямую построить String.Index из индекса. Вы можете использовать advance(theString.startIndex, 3)
, чтобы посмотреть на кластеры, составляющие строку, и вычислить индекс, соответствующий третьему кластеру, но осторожно, это операция O (N).
В вашем случае, вероятно, проще использовать операцию замены строк.
Подробнее о этом сообщении в блоге.
Ответ 6
Для отображения 10-значного номера телефона в формате номера США (###) ### - #### SWIFT 3
func arrangeUSFormat(strPhone : String)-> String {
var strUpdated = strPhone
if strPhone.characters.count == 10 {
strUpdated.insert("(", at: strUpdated.startIndex)
strUpdated.insert(")", at: strUpdated.index(strUpdated.startIndex, offsetBy: 4))
strUpdated.insert(" ", at: strUpdated.index(strUpdated.startIndex, offsetBy: 5))
strUpdated.insert("-", at: strUpdated.index(strUpdated.startIndex, offsetBy: 9))
}
return strUpdated
}
Ответ 7
Вы не можете использовать ниже Swift 2.0, потому что String
перестал быть collection
в Swift 2.0. но в Swift 3/4 больше не нужно теперь, когда String
снова является Collection
. Используйте нативный подход String
, Collection
.
var stringts:String = "3022513240"
let indexItem = stringts.index(stringts.endIndex, offsetBy: 0)
stringts.insert("0", at: indexItem)
print(stringts) // 30225132400
Ответ 8
Может быть, это расширение для Swift 4 поможет:
extension String {
mutating func insert(string:String,ind:Int) {
self.insert(contentsOf: string, at:string.index(string.startIndex, offsetBy: ind) )
}
}