You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从单个字符串提取字母及连续整数(多连续整数视为整体)

解决方案

一、更优实现方法:正则表达式匹配

直接用正则匹配连续的字母或数字序列,一步到位,逻辑清晰且无边界问题,完全符合需求。

Swift代码示例:

let input = "ab2bc31d"
// 正则模式:匹配连续大小写字母,或连续数字
let pattern = "[a-zA-Z]+|\\d+"
if let regex = try? NSRegularExpression(pattern: pattern) {
    let matches = regex.matches(in: input, range: NSRange(input.startIndex..., in: input))
    let result = matches.map {
        String(input[Range($0.range, in: input)!])
    }
    print(result) // 输出 ["ab", "2", "bc", "31", "d"]
}

不管输入是字母开头还是数字开头,都能自动按连续同类字符分组,无需额外处理。

二、修复原有components方法的问题

你的代码崩溃是因为intArr里的空字符串数量和stringArr的元素数量不匹配,导致stringArr.removeFirst()越界。修复思路是先提取两类字符的有效片段,再按原字符串顺序交替合并:

let input = "ab2bc31d"
// 提取非空的数字片段
let numberSegments = input.components(separatedBy: CharacterSet.decimalDigits.inverted).filter { !$0.isEmpty }
// 提取非空的字母片段
let letterSegments = input.components(separatedBy: CharacterSet.letters.inverted).filter { !$0.isEmpty }

var result = [String]()
var numIdx = 0
var letterIdx = 0

// 判断字符串起始类型,决定合并顺序
let startsWithLetter = input.first?.isLetter ?? false

if startsWithLetter {
    // 字母开头,交替添加字母段、数字段
    while letterIdx < letterSegments.count || numIdx < numberSegments.count {
        if letterIdx < letterSegments.count {
            result.append(letterSegments[letterIdx])
            letterIdx += 1
        }
        if numIdx < numberSegments.count {
            result.append(numberSegments[numIdx])
            numIdx += 1
        }
    }
} else {
    // 数字开头,交替添加数字段、字母段
    while numIdx < numberSegments.count || letterIdx < letterSegments.count {
        if numIdx < numberSegments.count {
            result.append(numberSegments[numIdx])
            numIdx += 1
        }
        if letterIdx < letterSegments.count {
            result.append(letterSegments[letterIdx])
            letterIdx += 1
        }
    }
}

print(result) // 输出 ["ab", "2", "bc", "31", "d"]

该方法先剥离空字符串干扰,再按原字符串的起始类型交替合并片段,彻底解决越界问题。

内容的提问来源于stack exchange,提问作者ogispert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:12:23