[英]Inserting a character in String (Swift)
我有一个字符串“000”。 我想将其更改为“0.00”。
我看了一下插入函数。
var str = "000"
str.insert(".", at: str.endIndex)
如何在结束索引之前获取 2 的索引?
我试过:
str.insert(".", at: str.endIndex - 1)
但这根本不起作用。
您还可以使用String
的character
属性。 它基本上是一个由字符串中的所有字符 (duh) 组成的数组。
所以你会:
var str = "000"
let index = str.characters.index(str.characters.startIndex, offsetBy: 1) //here you define a place (index) to insert at
str.characters.insert(".", at: index) //and here you insert
不幸的是,您必须先创建一个index
,因为.insert
不允许您使用Int
指定位置。
从 Swift 2 开始, String
不再符合SequenceType
。 换句话说,您不能使用for...in
循环遍历字符串。
简单易行的方法是将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"
car[3] = "d"
print(str)
使用它并通过 Swift 的 String 访问模型是一种简单而有用的方法。 既然下次您可以按原样循环遍历字符串,而不是将其转换为Array
,那么您会觉得一切顺利。
尝试一下,看看它是否有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.