如何在序列最后一次出现时分割字符串

2024-01-10

目标:具有内置分隔符的字符串应拆分为一个 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
    }
}

The range(of:...) https://developer.apple.com/documentation/swift/string/1642786-range的方法String has a .backwards选项 查找字符串的最后一次出现。 然后substring(to:) and 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
    }
}

Example:

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

斯威夫特 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
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在序列最后一次出现时分割字符串 的相关文章

随机推荐

  • 在反应中一次导入多个图像文件的任何简单方法

    我输入以下内容来导入图像 需要一个简短的方法来做到这一点 import banner1 from imgs Banners banner1 jpg import banner2 from imgs Banners banner2 jpg i
  • 通过提升业力重用已解析的变量

    我有一个与下面的代码相当的代码库 我尝试生成一个文本文件 其内容是变量的两倍 我觉得答案在于语义动作以及 a 和 val 但即使有文档也无法完成 您将如何做才能拥有 str 中的 toto 和输出 托托一些东西托托 即如何在业力中重用已解析
  • 检测设备是否正在充电

    我找不到任何明确的用途我最喜欢的工具 http www google com 不过我想我会把它放在这里 有没有办法使用 iPhone SDK 让应用程序检测设备是否处于通电状态 充电 底座等 如果设备正在通电 否则它是用户指定的设置 我希望
  • Rails 迁移变更列

    We have script generate migration add fieldname to tablename fieldname datatype用于向模型添加新列的语法 在同一行上 我们是否有一个脚本 生成来更改列的数据类型
  • timessince 过滤器的格式

    有没有办法使用 date timesince 过滤器 但不是有两个相邻的单元 而是只显示一个 例如 我的模板当前显示 18 小时 16 分钟 我怎样才能让它显示 18小时 这里不考虑四舍五入 谢谢 我想不出一个简单的内置方法来做到这一点 这
  • JavaScript 如何创建稀疏数组?

    虽然我不知道这个功能的名称 a a 57 test console log a length console log a 57 console log a 我很敬畏这是可能的 由于具有 C 背景 这种行为与分配内存之类的行为非常不同 那么几
  • Elasticsearch-Kibana docker-compose - 禁止使用“elastic”值

    我想使用 docker compose 运行 elasticsearch 和 kibana 这是我的 docker compose yml 我使用 docker compose env file dev env up 运行 Docker 组
  • 如何运行 NDK 示例?

    很抱歉问这样一个菜鸟问题 但是 NDK 文档是错误的 r7b 如果您使用 ADT 在 Eclipse 中进行开发 请使用新建项目向导 使用 导入 为每个示例创建一个新的 Android 项目 从现有源 选项并从以下位置导入源
  • 如何在 CMake 中检查列表是否包含特定条目?

    我想检查列表是否包含特定条目 如以下代码片段所示 macro foo if ARGN contains bar endif endmacro CMake 不提供contains 获得所需结果的最佳 最简单方法是什么 在CMake的wiki
  • 如何在 UWP 应用中隐藏/折叠标题栏?

    有没有办法以某种方式隐藏 折叠 使 UWP 应用程序中的标题栏暂时不可见 但不能完全禁用 我知道可以使应用程序全屏显示 然后标题栏自动折叠 但我需要在可调整大小的桌面窗口中实现它 我还知道您可以自定义标题栏的外观 例如颜色等 原因 我的应用
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • 结构化流Kafka 2.1->Zeppelin 0.8->Spark 2.4:spark不使用jar

    我有一个 Kafka 2 1 消息代理 想要对 Spark 2 4 中的消息数据进行一些处理 我想使用 Zeppelin 0 8 1 笔记本进行快速原型设计 我下载了结构化流所需的spark streaming kafka 0 10 2 1
  • 使 Eclipse equals() / hashCode() 使用 getters

    是否可以使默认的 Eclipse 生成 hashCode 和 equals 使用 getters 而不是字段引用 IE 我可以获取它使用的模板吗 我正在使用 Hibernate 代理对象仅在使用 getter 时才 LazyLoaded 而
  • 如何在 PyQt 中获取按钮或标签(QPushButton、QLabel)的背景颜色

    我对 PyQt 还很陌生 有谁告诉我如何在 PyQt 中获取按钮或标签 QPushButton QLabel 的背景颜色 这是示例代码 这会对你有所帮助 QPushButton button1 button2 button1 setStyl
  • session_regenerate_id() - 已在单元测试 Yii 控制器中发送的标头

    我正在尝试对我的控制器 Yii 框架 进行单元测试 dataProvider provider public function testActionEdit view login controller user new CWebUser u
  • 替换嵌套 for 循环的宏

    我找到了这个宏 define TIMES x for int i1 0 i1
  • 无法读取配置节“system.web.extensions”,因为它缺少节声明

    我收到错误 配置部分system web extensions无法读取 因为它缺少节声明 在安装我的网络应用程序时服务器2008 32位机 with NET框架4 0 但它在 2008 r2 64 位机器上运行良好 这是我的网络配置文件信息
  • Android Wear 启动器

    我想知道 Android Wear 启动器 如 Swipify 和 Wear Mini Launcher 如何拦截Android Wear主屏幕上的触摸事件 到目前为止 我已尝试将 onTouch 和 onClick 侦听器添加到应用程序中
  • Python 的 argparse 可以像 gnu getopt 一样排列参数顺序吗?

    GNU getopt 和使用它的命令行工具允许选项和参数交错 称为排列选项 请参阅http www gnu org software libc manual html node Using Getopt html Using Getopt
  • 如何在序列最后一次出现时分割字符串

    目标 具有内置分隔符的字符串应拆分为一个 int 和另一个字符串 如果分隔符序列 出现多次 则字符串应始终拼接在最后一个 是否有类似 C 中的 string lastIndexOf 之类的运算符 这就是我的解析器的样子 func parse