2017-05-26 4 views
0

J'ai une question. J'écris des tests pour une application mobile. Et à ce moment, je compare les prix dans différentes devises comme Livre, Euro, Inde, etc. Une comparaison possible devrait être "maintenant £ 1.678,95". Ce n'est pas un problème pour moi de couper le "maintenant", de couper l'espace - bref, d'obtenir la chaîne dans une formation possible de l'Int ou du Double. MAIS maintenant je suis en France. En France, la formation est "maintenant 2 500,00 €". Pas de problème avec le "maintenant", pas de problème avec les espaces en dehors du prix et pas de problème avec "€". MAIS il y a un espace dans le prix entre 2 et 500. Si je cours mon test, je n'ai que le "2" le reste est parti! Comment puis-je le faire, que les espaces ne devraient pas couper ici. Il doit être passé de "2 500,00" à "2500,00".Comment puis-je supprimer des espaces d'une chaîne?

J'espère que vous avez une idée :) Merci!

Mon code à ce moment est:

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

Vous devriez probablement utiliser [numéro formateurs] (https://stackoverflow.com/questions/544314/easiest-way-to-convert-a-nsstring-to-its-currency-equivalent-in-cocoa) au lieu de le faire. – Moritz

+0

Remplacez simplement toutes les occurrences de '[^ 0-9.,]' Par l'option '.regularExpression'. – Sulthan

Répondre

1

dur, parce que vous Je ne connais pas les paramètres régionaux de la chaîne. 1234 Euro peut être écrit comme € 1,234.00 dans le style anglais, ou 1.234,00 € dans les styles français et allemand. (L'euro est très commun en Angleterre aussi).

A partir des exemples limités que vous avez fournis, vous pouvez supprimer le premier mot, puis en supprimant tous les espaces, virgules, points et signes monétaires du reste avant de le convertir 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 
+0

Merci beaucoup, ça marche! Mais pouvez-vous me dire, comment puis-je obtenir le résultat de la boucle "si" pour travailler avec? – Saintz

+0

Je ne reçois aucun résultat en dehors du 'si'. Mon code ressemble à ceci: laisser indésirable = ",. £ € ₹" var firstPriceTrimmedDouble: Double? si let range = firstPrice.range (de: "") { let chars = firstPrix [range.upperBound .. Saintz

+0

Il imprimé le prix correct, e. g. le prix est "ab 269,00", il imprime "26900.0", mais après que la boucle "if" est terminée, firstPriceTrimmedDouble est à nouveau "nul". – Saintz

0

Pas vraiment clair ce que vous recherchez ... mais de supprimer tous les espaces blancs, essayez ceci:

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