我怎样才能得到字符串的第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,请参阅文档注释讨论
当前回答
你也可以像这样将字符串转换为字符数组:
let text = "My Text"
let index = 2
let charSequence = text.unicodeScalars.map{ Character($0) }
let char = charSequence[index]
这是在常数时间内在指定索引处获取char的方法。
下面的示例不是在常数时间内运行,而是需要线性时间。所以如果你有很多搜索字符串索引使用上述方法。
let char = text[text.startIndex.advancedBy(index)]
其他回答
我刚想出了一个巧妙的变通办法
var firstChar = Array(string)[0]
斯威夫特5.1.3:
添加一个String扩展名:
extension String {
func stringAt(_ i: Int) -> String {
return String(Array(self)[i])
}
func charAt(_ i: Int) -> Character {
return Array(self)[i]
}
}
let str = "Teja Kumar"
let str1: String = str.stringAt(2) //"j"
let str2: Character = str.charAt(5) //"k"
Swift的String类型没有提供characterAtIndex方法,因为Unicode字符串有几种编码方式。你要用UTF8, UTF16,还是别的?
您可以通过检索String来访问CodeUnit集合。utf8和String。utf16属性。您还可以通过检索String来访问UnicodeScalar集合。unicodeScalars财产。
在NSString实现的精神中,我返回一个unichar类型。
extension String
{
func characterAtIndex(index:Int) -> unichar
{
return self.utf16[index]
}
// Allows us to use String[index] notation
subscript(index:Int) -> unichar
{
return characterAtIndex(index)
}
}
let text = "Hello Swift!"
let firstChar = text[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"
一个类似蟒蛇的解决方案,允许你使用负下标,
var str = "Hello world!"
str[-1] // "!"
可能是:
extension String {
subscript (var index:Int)->Character{
get {
let n = distance(self.startIndex, self.endIndex)
index %= n
if index < 0 { index += n }
return self[advance(startIndex, index)]
}
}
}
顺便说一下,调换整个python的切片符号可能是值得的