swift - 返回字符串中变量的“位置”
问题描述
这是一个奇怪的问题,但我不确定是否可以这样做。
我正在尝试识别字符串中某个项目的“计数”位置。
例如,如果我有一个字符串:“你好多么美好的一天”(23 个字符),我想知道空格在哪里。在这种情况下,字符串将在第 6、11、13 和 20 个字符处有一个空格。是否有可以提供此反馈的功能?
任何见解将不胜感激。
提前感谢您宝贵的时间和洞察力。
解决方案
试试这个扩展:
extension String {
func indicesOf(string: String) -> [Int] {
var indices = [Int]()
var searchStartIndex = self.startIndex
while searchStartIndex < self.endIndex,
let range = self.range(of: string, range: searchStartIndex..<self.endIndex),
!range.isEmpty
{
let index = distance(from: self.startIndex, to: range.lowerBound)
indices.append(index)
searchStartIndex = range.upperBound
}
return indices
}
}
用法(请注意,在 Swift 中,第 n 个字符开始于0
而不是1
):
let string = "hello what a lovely day"
let indices = string.indicesOf(string: " ")
print("Indices are \(indices)")
索引为 [5, 10, 12, 19]
推荐阅读
- excel - 根据第一列中的信息复制行
- c++ - 犰狳函数的不同最小二乘误差
- python - 如何计算按两列分组的数据框中的百分比
- asp.net - ASP.NET 在哪里存储除 web.config 之外的程序集引用?
- javascript - 除非指定服务器值,否则 Apollo GraphQL 客户端解析器无法解析
- cryptography - 如何检测 loop-aes 加密磁盘/分区
- spring - 基于 Spring MVC 的应用程序在尝试使用 https url 访问它时没有登陆到默认成功 url,但在基于 http 的 url 上工作正常
- java - 如何在 Android Studio 中使用导入的 .so 库代码?
- sql - 如何在 Oracle 中以同一列的两种类型聚合为中心?
- apache-spark - 为什么 spark 任务看起来像按顺序运行