Swift中的字符串操作(子字符串)

时间:2014-10-02 18:04:27

标签: ios swift

如果我有一个如下字符串:

" ABC; expire = Thu,16-Oct-2014 16:46:53 GMT; path = /;",我试图在expire=和下一个;之间提取所有内容,这样我就可以获得时间戳,我将如何在Swift中执行此操作?我完全被字符和StringIndex的想法搞糊涂了。我觉得以下代码会给我" expire="字符串中的位置:

var range = cookie!.rangeOfString(" expires=");

但我不明白我应该从哪里去。

在类似Java的语言中,算法类似于:

1)找到" expires =&#34 ;;

的索引

2)在" expires ="之后取一切的子串。以完整字符串结尾;

3)查看子串中第一次出现&#34 ;;"

4)从索引0到索引中找到的所有内容都是过期时间戳。

你如何使用Swift字符串?

2 个答案:

答案 0 :(得分:3)

在Swift中,您可以使用正则表达式搜索字符串,而无需明确处理NSRegularExpression

let str = "abc; expire=Thu, 16-Oct-2014 16:46:53 GMT; path=/;"
let range = str.rangeOfString("(?<=expire=)[^;]*", options: .RegularExpressionSearch)
if let range = optRange? {
    print(str.substringWithRange(range))
} else {
    print("Not found")
}

正则表达式很简单:[^;]*表示&#34;直到第一个分号的字符序列&#34 ;; (?<=expire=)表示&#34;仅在expire=字符串&#34;之前匹配。

Demo.

答案 1 :(得分:1)

就个人而言,我会使用@dasblinkenlight使用正则表达式的解决方案,但如果你想在你的问题中做更类似于算法的事情,你可以:

let cookie: String = "abc; expires=Thu, 16-Oct-2014 16:46:53 GMT; path=/;"
if let range = cookie.rangeOfString(" expires=") {
    let expiresAndPath = cookie[range.endIndex..<cookie.endIndex]
    if let semicolonRange = expiresAndPath.rangeOfString(";") {
        let expires = expiresAndPath[expiresAndPath.startIndex..<semicolonRange.startIndex]
        /* do something with expires */
    }
}

步骤一步:

  1. 找到“expires =”
  2. 的索引

    let range = cookie.rangeOfString(" expires=")

    1. 将“expires =”之后的所有内容的子字符串转换为完整字符串
    2. let expiresAndPath = cookie[range.endIndex..<cookie.endIndex]

      1. 在子字符串中查找第一次出现的“;”
      2. let semicolonRange = expiresAndPath.rangeOfString(";")

        1. 从索引0到索引中找到的所有内容都是过期时间戳。
        2. let expires = expiresAndPath[expiresAndPath.startIndex..<semicolonRange.startIndex]