【问题标题】:How to split a string that doesn't have a separator in Swift如何在 Swift 中拆分没有分隔符的字符串
【发布时间】:2019-11-15 02:34:37
【问题描述】:

我希望将此字符串分成 4 部分。到目前为止,我只能使用 components(separatedBy:) 方法拆分它。但是,我还希望我将最后一句话 teamId4 分成两部分,我可以得到 teamId 和 4 的号码。我看过的所有解决方案中总是有分隔符,比如有空格、线条、句号等的字符串,这很容易。我怎样才能实现这个输出player23,8,teamId,4

var player = "player23_8_chelseaId4"

var splittedString: [String] {
    let stringArray = player.components(separatedBy: "_")
    let playerID = stringArray[0]
    let playerIndex = stringArray[1]
    let team = stringArray[2]
    // Would like "4" as the last string in the array
    let array = [playerID, playerIndex, team]
    return array
}

这是目前的输出

["player23", "8", "chelseaId4"]

期望的输出是

["player23", "8", "chelseaId", "4"]

【问题讨论】:

  • 数字前总是“Id”吗?如果最后一部分是“A123B456”怎么办?
  • 格式是静态的。我总是会收到这种格式的数据
  • 不,23 总是包含在球员姓名中

标签: arrays swift string foundation


【解决方案1】:

这是正则表达式解决方案。

在模式中,4 对括号代表 4 个捕获的字符串,\\w+ 表示一个或多个单词字符。分隔符是两个下划线字符和捕获后者的Id 字符串。

func splittedString(from player : String) throws -> [String] {
    var result = [String]()
    let pattern = "^(\\w+)_(\\w+)_(\\w+Id)(\\w+)$"
    let regex = try NSRegularExpression(pattern: pattern)
    if let match = regex.firstMatch(in: player, range: NSRange(player.startIndex..., in: player)) {
        for i in 1..<match.numberOfRanges {
            result.append(String(player[Range(match.range(at: i), in: player)!]))
        }
    }
    return result
}

let player = "player23_8_chelseaId4"
let splitted = try splittedString(from: player) // ["player23", "8", "chelseaId", "4"]

如果您只想要chelsea 而没有Id,请将模式更改为"^(\\w+)_(\\w+)_(\\w+)Id(\\w+)$"

【讨论】:

    【解决方案2】:
    var player = "player23_8_chelseaId4"
    
    var splittedString: [String] {
        let stringArray = player.components(separatedBy: "_")
        let playerID = stringArray[0]
        let playerIndex = stringArray[1]
        let team = stringArray[2]
    
        let temp = team.components(separatedBy: "Id")
        // Would like "4" as the last string in the array
        let array = [playerID, playerIndex,"\(temp[0])Id" , temp[1]]
        return array
    }
    
    print(splittedString) // ["player23", "8", "chelseaId", "4"]
    

    【讨论】:

      【解决方案3】:

      每个团队名称后面都有“Id”字符串吗?因此,您可以搜索子字符串 Id 并在其后剪切字符串。

      【讨论】:

        猜你喜欢
        • 2012-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        相关资源
        最近更新 更多