繁体   English   中英

在字符串中插入一个字符(Swift)

[英]Inserting a character in String (Swift)

我有一个字符串“000”。 我想将其更改为“0.00”。

我看了一下插入函数。

var str = "000"
str.insert(".", at: str.endIndex)

如何在结束索引之前获取 2 的索引?

我试过:

str.insert(".", at: str.endIndex - 1)

但这根本不起作用。

您还可以使用Stringcharacter属性。 它基本上是一个由字符串中的所有字符 (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM