我有一个格式为1223-3939-ABC.1
的ID,我想检索最后一个值,即1并增加它,所以它现在看起来像1223-3939-ABC.2
。但它可能是" 1"在那种情况下不存在,我想附加" .1"
我试图在Swift中实现这一点,这是我的代码:
var deviceId: String = "1234-ASCD-SCSDS.1"
if (deviceId != "") {
var id: [String] = deviceId.components(separatedBy: ".")
if let incrementedId: String = id.capacity > 1 ? deviceId.components(separatedBy: ".")[1] : "" {
if (incrementedId == "") {
//should append to id
var firstEle = deviceId.components(separatedBy: ".")[0]
firstEle.append(".")
firstEle.append("1")
deviceId = firstEle
} else {
// retrieve that id, convert to int, increment id, convert back to string and replace the old id with new id
let newId: Int = Int(deviceId.components(separatedBy: ".")[1])! + 1
deviceId = deviceId.replacingOccurrences(of: ".\\d", with: ".\(newId)", options: .regularExpression)
}
}
}
不确定我做错了什么?
答案 0 :(得分:2)
.\\d
,其中.
实际上是任何符号。将其替换为\\.\\d
,它将按预期运行。capacity
,但您需要引用count
来了解组件数量。 容量 - 数组可以包含的元素总数 分配新存储。
答案 1 :(得分:1)
有几个问题,例如
capacity
(正如尼基塔所说),id
有两个要素。主要问题是
deviceId = deviceId.replacingOccurrences(of: ".\\d", with: ".\(newId)", options: .regularExpression)
替换所有出现的任意字符后跟
任何带有".\(newId)"
的数字。应该是
deviceId = id[0] + ".\(newId)"
代替。
但整个问题可以更容易解决:
.1
这两项检查都可以通过条件绑定来实现,这样就可以了 仅当设备ID已经有尾随时才执行if-block 号:
var deviceId = "1234-ASCD-SCSDS.1"
if let pos = deviceId.range(of: ".", options: .backwards),
let id = Int(deviceId.substring(from: pos.upperBound)) {
deviceId = deviceId.substring(to: pos.upperBound) + String(id + 1)
} else {
deviceId = deviceId + ".1"
}
print(deviceId) // 1234-ASCD-SCSDS.2