我在Swift中有这样的字符串:
var stringts:String = "3022513240"
如果我想将其更改为字符串,如下所示:"(302)-251-3240"
,我想在索引0处添加括号,我该怎么做?
在Objective-C中,它以这种方式完成:
NSMutableString *stringts = "3022513240";
[stringts insertString:@"(" atIndex:0];
如何在Swift中完成?
答案 0 :(得分:71)
使用原生的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
如果您有兴趣详细了解字符串和效果,请查看@Thomas Deniau's answer down below。
答案 1 :(得分:26)
如果您将其声明为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 :(得分:6)
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
大于或等于字符串的大小,否则会导致崩溃。
答案 3 :(得分:6)
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 强>
答案 4 :(得分:4)
将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
}
答案 5 :(得分:3)
你不能,因为在Swift中,字符串索引(String.Index)是根据Unicode字形集群定义的,因此它可以很好地处理所有的Unicode内容。所以你不能直接从索引构造String.Index。您可以使用advance(theString.startIndex, 3)
查看构成字符串的集群并计算与第三个集群对应的索引,但请注意,这是一个O(N)操作。
在您的情况下,使用字符串替换操作可能更容易。
查看this blog post了解详情。
答案 6 :(得分:3)
也许Swift 4的这个扩展程序会有所帮助:
{{1}}
答案 7 :(得分:1)
Dilmurat答案的Swift 4.2版本(已修复代码)
extension String {
mutating func insert(string:String,ind:Int) {
self.insert(contentsOf: string, at:self.index(self.startIndex, offsetBy: ind) )
}
}
请注意,如果索引必须与您要插入(自身)的字符串而不是所提供的字符串相对应。
答案 8 :(得分:0)
简单易行的方法是将 String
转换为 Array
以获得索引的好处,就像这样:
let input = Array(str)
如果您尝试在不使用任何转换的情况下索引到 String
。
这是扩展的完整代码:
extension String {
subscript (_ index: Int) -> String {
get {
String(self[self.index(startIndex, offsetBy: index)])
}
set {
if index >= count {
insert(Character(newValue), at: self.index(self.startIndex, offsetBy: count))
} else {
insert(Character(newValue), at: self.index(self.startIndex, offsetBy: index))
}
}
}
}
现在您可以使用字符串的索引从字符串中读取和写入单个字符,就像您最初想要的那样:
var str = "car"
str[3] = "d"
print(str)
使用它并通过 Swift 的 String 访问模型是一种简单而有用的方法。
现在,当您可以按原样循环遍历字符串而不是将其转换为 Array
时,下次您会感觉一切顺利。
试试看,看看是否有帮助!