当前位置: 首页 > 面试题库 >

迅速查找所有出现的子串

姜业
2023-03-14
问题内容

我在这里有Swift的String类的扩展,该扩展返回给定子字符串的第一个字母的索引

谁能帮我做到这一点,这样它将返回所有出现的数组,而不仅仅是第一个出现的数组?

谢谢。

extension String {
    func indexOf(string : String) -> Int {
        var index = -1
        if let range = self.range(of : string) {
            if !range.isEmpty {
                index = distance(from : self.startIndex, to : range.lowerBound)
            }
        }
        return index
    }
}

例如,除了返回值,50我想要类似[50, 74, 91, 103]


问题答案:

您只是不断扩大搜索范围,直到找不到子字符串的任何更多实例:

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
    }
}

let keyword = "a"
let html = "aaaa"
let indicies = html.indicesOf(string: keyword)
print(indicies) // [0, 1, 2, 3]


 类似资料:
  • 问题内容: 我需要解析一个HTML文档并查找其中所有出现的字符串。 我目前将HTML加载到字符串变量中。我只需要字符位置,这样我就可以遍历列表以在字符串之后返回一些数据。 该函数仅返回第 一个 匹配项。如何 全部 归还呢? 问题答案: 在不使用正则表达式的情况下,类似这样的方法应该可以返回字符串位置:

  • 问题内容: Python具有和获取字符串中子字符串的索引。 我想知道是否有类似的东西可以返回所有找到的索引(不仅是开头的第一个,还是结尾的第一个)。 例如: 问题答案: 没有简单的内置字符串函数可以满足你的需求,但是你可以使用功能更强大的正则表达式: 如果要查找重叠的匹配项,先行搜索将做到: 如果你想要一个没有重叠的反向查找全部,则可以将正向和负向超前组合成这样的表达式: 返回一个,因此你可以更改

  • 问题内容: 我正在使用Core Data开发应用程序。当我 使用以下方法创建实例时: 我在日志中收到警告: 我该如何解决? 还有另一个问题,如何在NSManagedObject 子类中定义实例方法? 问题答案: Xcode 7的更新(最终):不再需要在类之前添加模块名称(如Xcode6和Xcode7的早期beta版本一样)。Apple文档“ 实现核心数据托管对象子类”已相应更新。 数据模型检查器现

  • 问题内容: 我正在尝试查找Java字符串中所有出现的子字符串。 例如:在“ ababsdfasdfhelloasdf”中搜索“ asdf”将返回[8,17],因为有2个“ asdf”,一个在位置8,另一个在17。在“ aaaaaa”中搜索“ aa”将返回[0, 1,2,3,4],因为位置0、1、2、3和4处有一个“ aa”。 我尝试了这个: 可以在Python中解决此问题,如下所示: 其中“ wo

  • 问题内容: 在Eclipse中,如何找到Java应用程序中函数的所有用法?快捷方式是什么? 我尝试使用+ 来搜索方法,但它会返回所有具有相同名称的方法。 问题答案: 右键单击该功能时,可以在上下文菜单中找到菜单条目。当光标在函数或成员上方时,您也可以按+ 。并非每个项目和文件类型都支持此功能。例如,EPIC Perl仅支持查找功能的定义。

  • 问题内容: 我正在尝试查找“ |”的所有出现 在一个字符串中。 但我得到一个错误: 问题答案: 功能: 将返回的索引列表中的出现。