Swift - 在字符串中查找多个位置的字符

4
在 Swift 中,如果有以下字符串:"this is a string",如何获得该字符串中字符" "(空格)所在位置的数组?
期望结果:[4,7,9] 我已经尝试过:
let spaces: NSRange = full_string.rangeOfString(" ")

但是这只返回了4个索引,而不是所有的索引。
你有什么想法吗?
2个回答

8

这里是一个简单的方法 - 已更新到Swift 5.6 (Xcode 13):

let string = "this is a string"

let offsets = string
    .enumerated()
    .filter { $0.element == " " }
    .map { $0.offset }

print(offsets) // [4, 7, 9]

它是如何工作的:

  • enumerated() 枚举字符串的字符
  • filter 删除不是空格的字符
  • map 将元组数组转换为仅包含索引的数组

0

使用正则表达式的 Swift 1.2 解决方案

func searchPattern(pattern : String, inString string : String) -> [Int]?
{
  let regex = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions(), error: nil)
  return regex?.matchesInString(string, options: NSMatchingOptions(), range: NSRange(location:0, length:count(string)))
               .map { ($0 as! NSTextCheckingResult).range.location }
}

let string = "this is a string"

searchPattern("\\s\\S", inString : string) // [4, 7, 9]
searchPattern("i", inString : string) // [2, 5, 13]

这里有个谜题:searchPattern(" ", inString : " ") 返回 Optional([4]) :) - Martin R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接