swift - 如何从 String Swift 中选择第一个和最后一个数字
问题描述
我想从动态字符串中获取第一个和最后一个数字。
字符串可以是任何数字,如下所示。
"1-3,28-30,55" ==>输出为 1 & 55
"104-105,131-132,157" ==>输出为 104 & 157
"188,192,194" ==>输出为 188 & 194
"202" ==>输出为 202 & 0
"204-206,208-212,215-220" 输出为 204 & 220
目的
class PalletRangeObject: NSObject {
var start: Int = 0
var end: Int = 0
var strRange: String = ""
init(start: Int, end: Int, range: String) {
self.start = start
self.end = end
self.strRange = range
}
}
对于上述成就,我尝试了下面的代码,但在某些情况下它不起作用。
for i in 0..<self.arrPalletRange.count {
let objPlRange = self.arrPalletRange[i]
if !objPlRange.strRange.isEmpty {
var nStart = 0
var nEnd = 0
let pointsArr = objPlRange.strRange.components(separatedBy: ",")
for i in 0..<pointsArr.count {
let arr = pointsArr[i].components(separatedBy: "-")
let newData = arr.map { Int($0)!}
if newData.count == 1 {
if nStart == 0 {
nStart = Int(newData.first ?? 0)
continue
}
nEnd = Int(newData.first ?? 0)
continue
}
else {
if nStart == 0 {
nStart = Int(newData.first ?? 0)
continue
}
nEnd = Int(newData.last ?? 0)
}
}
objPlRange.start = nStart
objPlRange.end = nEnd
}
}
谁能指导我实现这一目标。
提前致谢
解决方案
它不必那么复杂。您似乎只想让第一个和最后一个子字符串由,
or分隔-
。
您可以使用components(separatedBy:)
for i in 0..<self.arrPalletRange.count {
let objPlRange = self.arrPalletRange[i]
let allComponents = objPlRange.strRange.components(separatedBy: CharacterSet([",", "-"]))
if let firstComponent = allComponents.first,
let firstComponentInt = Int(firstComponent),
let lastComponent = allComponents.last,
let lastComponentInt = Int(lastComponentInt) {
objPlRange.start = firstComponentInt
objPlRange.end = lastComponentInt
} else {
// the string is empty, or the values are not valid integers
}
}
或者,您可以找到 a -
or的第一个和最后一个索引,
,并在这些位置剪切字符串。这避免了创建所有组件的数组,因为您不需要其中的大部分。
for i in 0..<self.arrPalletRange.count {
let objPlRange = self.arrPalletRange[i]
let firstIndex = objPlRange.strRange.firstIndex(where: { $0 == "-" || $0 == "," }) ?? objPlRange.strRange.endIndex
let lastIndex = objPlRange.strRange.lastIndex(where: { $0 == "-" || $0 == "," }) ?? objPlRange.strRange.startIndex
if let firstComponentInt = Int(objPlRange.strRange[..<firstIndex])
let lastComponentInt = Int(lastComponentInt[lastIndex...]) {
objPlRange.start = firstComponentInt
objPlRange.end = lastComponentInt
} else {
// the string is empty, or the values are not valid integers
}
}
推荐阅读
- xml - 如何使用 Xquery 提取国家名称?
- python - 为什么我没有得到图像的大小
- python - 如何解决溢出错误:数学范围错误
- angular - 当另一个手风琴打开时关闭一个手风琴
- javascript - 如何使用我的对象数组使用 D3Js 图表进行绘制
- paperjs - PaperJS,需要使用鼠标向下选择透明光栅下的项目
- java - 大多数简单应用程序上的 IntelliJ 错误
- html - 带步骤的进度条
- java - 如何访问另一个 xml 元素中的 xml 元素(JAXB bindingsl
- google-maps - 使用 Google Maps API 显示 SVG 叠加层的优化建议