2017-05-26 9 views
0

私は質問があります。私はモバイルアプリのテストを書く。現時点では、私はポンド、ユーロ、インドなどの異なる通貨の価格を比較します。可能な比較は「現在1.678,95ポンド」でなければなりません。私が "今"を切り、空白を短くカットすることは問題ありません。短い文字列を可能なIntまたはDouble形式で得ることです。しかし今はフランスにいる。フランスでは、形成は "maintenant 2 500,00€"です。 "maintenant"に問題はありません。価格以外の空白に問題はなく、 "€"には問題ありません。文字列からスペースを削除するにはどうすればよいですか?

しかし、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

あなたはおそらく使用する必要があります[番号を:あなたは、あなたがダブルにそれを変換する前に、残りのすべてのスペース、コンマ、ドット、通貨記号を削除、最初の単語を削除することができます提供限られた例から

formatters](https://stackoverflow.com/questions/544314/easiest-way-to-convert-a-nsstring-to-its-currency-equivalent-in-cocoa)を使用してください。 – Moritz

+0

'[^ 0-9。、]'のどの部分も '.regularExpression'オプションで置き換えてください。 – 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」以外の結果は得られません。私のコードは次のようになります: 不要な= "、。" " var firstPriceTrimmedDouble:Double? 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) 
} 
関連する問題