2017-05-26 82 views
0

我有一個問題。我爲移動應用程序編寫測試。在此刻,我比較不同貨幣的價格,如英鎊,歐元,印度等。可能的比較應該是「現在£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) 
+1

你或許應該使用[號碼格式化程序](https://stackoverflow.com/questions/544314/easiest-way-to-convert-a-nsstring-to-its-currency-equivalent-in-cocoa)而不是這樣做。 – Moritz

+0

只需用'.regularExpression'選項替換'[^ 0-9。,]'的任何出現。 – Sulthan

回答

1

艱難,因爲你不知道字符串的區域設置。 1234歐元可以寫成英文風格的€ 1,234.00,或法文和德文風格的1.234,00 €。 (歐元在英格蘭也很常見)。

從你提供的,你可以刪除的第一個詞,然後刪除所有空格,逗號,頓號和貨幣符號從剩餘的將其轉換爲雙前有限的例子:

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 
+0

非常感謝,它的作品!但是,你能告訴我,我如何從「if」循環中得到結果來處理它? – Saintz

+0

我沒有得到'if'以外的結果。我的代碼如下所示: let unwanted =「,。£€₹」 var firstPriceTrimmedDouble:Double? if let range = firstPrice.range(of:「」){ let chars = firstPrice [range.upperBound .. Saintz

+0

它打印正確的價格,例如。 G。價格是「ab 269,00」,它打印「26900.0」,但'if'循環結束後,firstPriceTrimmedDouble再次爲'nil'。 – Saintz

0

真不明白你是什麼後...但除去所有空格,試試這個:

var price: String = ... 
while let range = price.rangeOfCharacter(from: .whitespaces) { 
    price.removeSubrange(range) 
}