如何获得字符串的第N个字符?我尝试了括号([]
)访问器,但没有成功。
var string = "Hello, world!"
var firstChar = string[0] // Throws error
错误:“subscript”不可用:不能用Int为字符串下标,有关讨论,请参阅文档注释
注意:关于Swift4和Swift5的正确实现,请参阅Leo Dabus的答案。
在Swift4中引入了substring
类型,通过与原始字符串共享存储,使子字符串更快、更高效,所以下标函数应该返回的就是这个。
extension StringProtocol {
subscript(offset: Int) -> Character { self[index(startIndex, offsetBy: offset)] }
subscript(range: Range<Int>) -> SubSequence {
let startIndex = index(self.startIndex, offsetBy: range.lowerBound)
return self[startIndex..<index(startIndex, offsetBy: range.count)]
}
subscript(range: ClosedRange<Int>) -> SubSequence {
let startIndex = index(self.startIndex, offsetBy: range.lowerBound)
return self[startIndex..<index(startIndex, offsetBy: range.count)]
}
subscript(range: PartialRangeFrom<Int>) -> SubSequence { self[index(startIndex, offsetBy: range.lowerBound)...] }
subscript(range: PartialRangeThrough<Int>) -> SubSequence { self[...index(startIndex, offsetBy: range.upperBound)] }
subscript(range: PartialRangeUpTo<Int>) -> SubSequence { self[..<index(startIndex, offsetBy: range.upperBound)] }
}
若要将子字符串
转换为字符串
,只需执行字符串(string[0..2])
,但只有在计划保留子字符串的情况下才应执行此操作。否则,将其保留为子字符串
会更有效。
<罢工> 如果有人能想出一个好方法把这两个扩展合二为一,那就太好了。我试着延长 StringProtocol
没有成功,因为 那里不存在index
方法。 注意:这个答案已经编辑过了,已经正确实现了,现在也适用于子字符串。只需确保使用有效的范围,以避免在下标您的StringProtocol类型时崩溃。对于使用不会因超出范围的值而崩溃的范围进行下标,您可以使用以下实现
错误消息显示“See The documentation comment for discussion”。Apple在文件UnavailableStringAPIS.swift中提供了以下解释:
用整数对字符串进行下标不可用。
“字符串中的i
th字符”的概念在不同的库和系统组件中有不同的解释。应该根据用例和涉及的API选择正确的解释,因此string
不能用整数作为下标。
Swift提供了几种不同的方法来访问存储在字符串中的字符数据。
>
String.utf8
是字符串中UTF-8代码单元的集合。将字符串转换为UTF-8时使用此API。大多数POSIX API以UTF-8代码单元来处理字符串。
string.utf16
是字符串形式的UTF-16代码单元的集合。大多数Cocoa和Cocoa touch API按照UTF-16代码单元处理字符串。例如,与nsattributedstring
和nsregularexpress
一起使用的nsrange
实例以UTF-16代码单位存储子字符串偏移量和长度。
string.characters
是扩展的字素簇的集合,这些字素簇是用户感知字符的近似值。
注意,在处理包含人类可读文本的字符串时,应尽可能避免逐字符处理。改用高级区域设置敏感的Unicode算法,例如String.LocalizedStandardCompare()
、String.LocalizedLowerCaseString
、String.LocalizedStandardRangeOfString()
等。
问题内容: 如何在PHP中获取字符串的前n个字符?将字符串修剪为特定数量的字符并在需要时附加“ …”的最快方法是什么? 问题答案: 更新: 基于检查长度的建议(并确保修剪后的和未修剪的琴弦的长度相似): 因此,您将获得最多13个字符的字符串;13个(或更少)普通字符或10个字符,后跟“ …” 更新2: 或作为功能: 更新3: 自从我写了这个答案已经有一段时间了,我实际上不再使用此代码了。我更喜欢这
本文向大家介绍Swift语言反转字符串,包括了Swift语言反转字符串的使用技巧和注意事项,需要的朋友参考一下 示例 2.2 3.0
如何使用Swift从String变量中删除最后一个字符?在文档中找不到它。 以下是完整的示例:
所以我将一个字符串传递到main函数:int main(int argc,char*argv[]) 我理解argc(在这种情况下是2),但是不明白我如何逐个字符地阅读argv[]?当我打印argv[0]不应该打印该字符串的字符数组中的第一个字符吗? 谢啦
问题内容: 在JavaScript中,这是我们如何在每个第3个字符处分割字符串 我试图弄清楚如何用Java做到这一点。有指针吗? 问题答案: 你可以这样: 产生: 正则表达式匹配一个空字符串,该字符串的最后一个匹配项()后跟三个字符(),前者()
问题内容: 如何从Python列表中的第一个字符串中获取第一个字符? 看来我可以使用,但不会给我第一个字符。 问题答案: 你几乎是对的。最简单的方法是 但 也可以。 你想 结束 的第一个字符(字符零)后,未 启动 的第一个字符(字符零),这是以后有什么在你的问题的手段的代码。