swift - 如何在序列的最后一次出现处拆分字符串

标签 swift string split

目标:具有内置分隔符的字符串应拆分为一个 int 和另一个字符串。如果分隔符序列'###'出现不止一次,字符串将始终拼接在最后一个'###'。

是否有像 C# 中的 string.lastIndexOf("###") 这样的运算符?

这是我的解析器的样子:

func parseTuple(from string: String) -> (String, Int)? {
    let parsedString = string.components(separatedBy: "###")
    if let tupleString = String(parsedString[0]), let tupleInt = Int(parsedString[1]) {
        return (tupleString, tupleInt)
    } else {
        return nil
    }
}

最佳答案

range(of:...) String 的方法有一个 .backwards 选项 查找最后一次出现的字符串。 然后 substring(to:)substring(from:) 可以与 该范围的下限/上限以提取字符串的各个部分 在分隔符之前/之后:

func parseTuple(from string: String) -> (String, Int)? {

    if let theRange = string.range(of: "###", options: .backwards),
        let i = Int(string.substring(from: theRange.upperBound)) {
        return (string.substring(to: theRange.lowerBound), i)
    } else {
        return nil
    }
}

例子:

if let tuple = parseTuple(from: "Connect###Four###Player###7") {
    print(tuple)
    // ("Connect###Four###Player", 7)
}

Swift 4 更新:

func parseTuple(from string: String) -> (String, Int)? {

    if let theRange = string.range(of: "###", options: .backwards),
        let i = Int(string[theRange.upperBound...]) {
        return (String(string[...theRange.lowerBound]), i)
    } else {
        return nil
    }
}

关于swift - 如何在序列的最后一次出现处拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44883983/

相关文章:

java - 将字符串压缩为a2b3...等

ios - UIPageViewController 在进入主页时堆叠 ViewController

swift - 错误 :The use of xcframeworks is not supported in the legacy build system

ios - swift 5 : Why is my data within struct suddenly empty/nil?

java 等价于正则表达式来替换字符串中直到特定字符的所有字符

javascript - 使用 split/join 将字符串替换为数组

ios - 旋转后如何调整相机纵横比?

Java:单行子字符串

Javascript 拆分数组

Java:split() 返回 [Ljava.lang.String;@186d4c1],为什么?