我有一个问题。我为移动应用编写测试。在这一刻,我比较了不同货币的价格,如英镑,欧元,印度等。可能的比较应该是“现在1.678,95英镑”。对我来说切割“现在”,切割空白是没有问题的 - 简短地说,可以在可能的Int或Double形式中获得字符串。但现在我在法国。在法国,编队是“维持2 500,00€”。 “维护”没有问题,价格外的空白没有问题,“€”没有问题。
但是价格在2到500之间有一个空间。如果我运行我的测试,我只有“2”,其余的都没了! 我怎么能这样做,空白不应该在这里切割。它应该从“2 500,00”退回到“2500,00”。
希望你有个主意:)谢谢!
此刻我的代码是:
var firstPrice = XCUIApplication().collectionViews.cells.element(boundBy: 0).staticTexts.element(boundBy: 2).label
firstPrice = firstPrice.replacingOccurrences(of: "£", with: "")
firstPrice = firstPrice.replacingOccurrences(of: "€", with: "")
firstPrice = firstPrice.replacingOccurrences(of: "₹", with: "")
let firstPriceArray = firstPrice.components(separatedBy: .whitespaces).filter { !$0.isEmpty }
firstPrice = firstPriceArray[1]
let firstPriceTrimmedDouble = firstPrice.toDouble(with: SiteIDHelper.locale(from: SiteIDHelper.SiteID(rawValue: Int(sideIDS))!))!
print(firstPriceTrimmedDouble)
答案 0 :(得分:1)
很难,因为你不知道字符串的语言环境。 1234欧元可以用英语风格写成€ 1,234.00
,或者用法语和德语风格写成1.234,00 €
。 (欧元在英格兰也很常见)。
根据您提供的有限示例,您可以删除第一个单词,然后在将其转换为Double之前删除剩余的所有空格,逗号,点和货币符号:
let priceString = "maintenant 2 500,00 €"
let unwanted = " ,.£€₹"
var doubleValue : Double?
if let range = priceString.range(of: " ") {
let chars = priceString[range.upperBound..<priceString.endIndex]
.characters.filter({ !unwanted.characters.contains($0) })
doubleValue = Double(String(chars))
}
// run your asserts here
答案 1 :(得分:0)
不太清楚你的目标是什么......但要删除所有空格,请试试这个:
var price: String = ...
while let range = price.rangeOfCharacter(from: .whitespaces) {
price.removeSubrange(range)
}