如何在Swift中的字符串中的特定索引处添加字符

lak*_*esh 45 string insert ios swift

我在Swift中有这样的字符串:

var stringts:String = "3022513240"
Run Code Online (Sandbox Code Playgroud)

如果我想将它更改为字符串,如下所示:"(302)-251-3240",我想在索引0处添加括号,我该怎么做?

在Objective-C中,它是这样完成的:

 NSMutableString *stringts = "3022513240";
 [stringts insertString:@"(" atIndex:0];
Run Code Online (Sandbox Code Playgroud)

怎么在Swift中做到这一点?

Dan*_*ieu 74

斯威夫特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
Run Code Online (Sandbox Code Playgroud)

如果您有兴趣了解有关字符串和性能的更多信息,请查看下面的@Thomas Deniau的答案.

  • 无法在swift中使用3 (2认同)

Dha*_*esh 33

如果你宣布它NSMutableString是可能的,你可以这样做:

let str: NSMutableString = "3022513240)"
str.insert("(", at: 0)
print(str)
Run Code Online (Sandbox Code Playgroud)

输出是:

(3022513240)
Run Code Online (Sandbox Code Playgroud)

编辑:

如果你想在开始时添加:

var str = "3022513240)"
str.insert("(", at: str.startIndex)
Run Code Online (Sandbox Code Playgroud)

如果要在最后一个索引处添加字符:

str.insert("(", at: str.endIndex)
Run Code Online (Sandbox Code Playgroud)

如果你想添加特定的索引:

str.insert("(", at: str.index(str.startIndex, offsetBy: 2))
Run Code Online (Sandbox Code Playgroud)

  • 你不应该这样做,因为如果你的字符串包含你不期望的Unicode字符,你可能会在字形集群的中间插入东西.相反,看看你是如何获得索引并使它们成为String.Index友好的,以便设计一个Unicode友好的流程...... (7认同)

Eri*_*ric 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"
Run Code Online (Sandbox Code Playgroud)

小心:确保index大于或等于字符串的大小,否则你会崩溃.


Elv*_*inM 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


Tho*_*iau 5

你不能,因为在 Swift 中,字符串索引 (String.Index) 是根据 Unicode 字素簇定义的,因此它可以很好地处理所有 Unicode 内容。因此您不能直接从索引构造 String.Index 。您可以使用advance(theString.startIndex, 3)查看组成字符串的簇并计算与第三个簇对应的索引,但请注意,这是一个 O(N) 操作。

在您的情况下,使用字符串替换操作可能更容易。

查看这篇博文了解更多详细信息。


Man*_*ngh 5

将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
}
Run Code Online (Sandbox Code Playgroud)


Dil*_*yum 5

也许Swift 4的这个扩展会有所帮助:

extension String {
  mutating func insert(string:String,ind:Int) {
    self.insert(contentsOf: string, at:self.index(self.startIndex, offsetBy: ind) )
  }
}
Run Code Online (Sandbox Code Playgroud)