我怎样才能得到字符串的第n个字符?我尝试了括号([])访问器,没有运气。
var string = "Hello, world!"
var firstChar = string[0] // Throws error
错误:'下标'是不可用的:不能下标String与Int,请参阅文档注释讨论
我怎样才能得到字符串的第n个字符?我尝试了括号([])访问器,没有运气。
var string = "Hello, world!"
var firstChar = string[0] // Throws error
错误:'下标'是不可用的:不能下标String与Int,请参阅文档注释讨论
当前回答
在项目中包含此扩展
extension String{
func trim() -> String
{
return self.trimmingCharacters(in: NSCharacterSet.whitespaces)
}
var length: Int {
return self.count
}
subscript (i: Int) -> String {
return self[i ..< i + 1]
}
func substring(fromIndex: Int) -> String {
return self[min(fromIndex, length) ..< length]
}
func substring(toIndex: Int) -> String {
return self[0 ..< max(0, toIndex)]
}
subscript (r: Range<Int>) -> String {
let range = Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)),
upper: min(length, max(0, r.upperBound))))
let start = index(startIndex, offsetBy: range.lowerBound)
let end = index(start, offsetBy: range.upperBound - range.lowerBound)
return String(self[start ..< end])
}
func substring(fromIndex: Int, toIndex:Int)->String{
let startIndex = self.index(self.startIndex, offsetBy: fromIndex)
let endIndex = self.index(startIndex, offsetBy: toIndex-fromIndex)
return String(self[startIndex...endIndex])
}
然后像这样使用函数
let str = "Sample-String"
let substring = str.substring(fromIndex: 0, toIndex: 0) //returns S
let sampleSubstr = str.substring(fromIndex: 0, toIndex: 5) //returns Sample
其他回答
swift字符串类不提供在特定索引处获取字符的能力,因为它本身支持UTF字符。UTF字符在内存中的可变长度使得直接跳转到字符是不可能的。这意味着每次都必须手动遍历字符串。
您可以扩展String以提供一个方法,该方法将遍历字符,直到您需要的索引
extension String {
func characterAtIndex(index: Int) -> Character? {
var cur = 0
for char in self {
if cur == index {
return char
}
cur++
}
return nil
}
}
myString.characterAtIndex(0)!
斯威夫特4
let str = "My String"
索引处的字符串
let index = str.index(str.startIndex, offsetBy: 3)
String(str[index]) // "S"
子字符串
let startIndex = str.index(str.startIndex, offsetBy: 3)
let endIndex = str.index(str.startIndex, offsetBy: 7)
String(str[startIndex...endIndex]) // "Strin"
前n个字符
let startIndex = str.index(str.startIndex, offsetBy: 3)
String(str[..<startIndex]) // "My "
最后n个字符
let startIndex = str.index(str.startIndex, offsetBy: 3)
String(str[startIndex...]) // "String"
Swift 2和3
str = "My String"
**字符串索引**
斯威夫特2
let charAtIndex = String(str[str.startIndex.advancedBy(3)]) // charAtIndex = "S"
斯威夫特3
str[str.index(str.startIndex, offsetBy: 3)]
子字符串fromIndex toIndex
斯威夫特2
let subStr = str[str.startIndex.advancedBy(3)...str.startIndex.advancedBy(7)] // subStr = "Strin"
斯威夫特3
str[str.index(str.startIndex, offsetBy: 3)...str.index(str.startIndex, offsetBy: 7)]
前n个字符
let first2Chars = String(str.characters.prefix(2)) // first2Chars = "My"
最后n个字符
let last3Chars = String(str.characters.suffix(3)) // last3Chars = "ing"
你可以使用SwiftString (https://github.com/amayne/SwiftString)来做这件事。
"Hello, world!"[0] // H
"Hello, world!"[0...4] // Hello
免责声明:我写了这个扩展
我的解决方案是在一行中,假设cadena是字符串,4是你想要的第n个位置:
let character = cadena[advance(cadena.startIndex, 4)]
简单的…我想Swift在未来的版本中会包含更多关于子字符串的内容。
Swift 2.0的Xcode 7通用种子
var text = "Hello, world!"
let firstChar = text[text.startIndex.advancedBy(0)] // "H"
对于第n个字符,将0替换为n-1。
编辑:Swift 3.0
text[text.index(text.startIndex, offsetBy: 0)]
注意,有更简单的方法来获取字符串中的某些字符
例如:let firstChar = text.characters.first