2016-07-25 1 views
1

Je possède ce String que je suis lu à l'aide Selenium:Scala normalise la chaîne avec des espaces supplémentaires et une nouvelle ligne

val address="\nZONE COFFERCDALD ENGLOS LES GE\nRUE DU HEM\n21542 SDQUEFIN " 

Et je veux comparer String un à l'autre:

val compareTo ="ZONE COFFERCDALD ENGLOS LES GE RUE DU HEM 21542 SDQUEFIN" 

donc i pensait faire quelque chose comme ça:

val newAddress = address.replace("\n", " ").replace(" ", " ").trim 

Pensez-vous que ce serait la meilleure solution?

+0

Etant donné votre échantillon, vos solutions semblent déjà bonnes. – pedrofurla

Répondre

2

Si vous souhaitez rogner des espaces supplémentaires, votre code ne fonctionne pas comme prévu lorsque plus de 3 espaces d'affilée apparaissent.

"aaa ab ccc".replace("\n", " ").replace(" ", " ").trim //aaa ab ccc

address.replaceAll("\\s+", " ") est probablement en train de faire ce que vous essayez d'atteindre.

+0

'address.replaceAll (" \\ s + "," ")' peut-être mieux –

1

Pour contourner les subtilités de caractères arrière chaîne et de formatage considèrent ces transformations,

val a = address.split("\\W+").filter(_.nonEmpty) 
Array(ZONE, COFFERCDALD, ENGLOS, LES, GE, RUE, DU, HEM, 21542, SDQUEFIN) 

et

val c = compareTo.split("\\W+").filter(_.nonEmpty) 
Array(ZONE, COFFERCDALD, ENGLOS, LES, GE, RUE, DU, HEM, 21542, SDQUEFIN) 

Nous pouvons maintenant comparer les transformations, par exemple, comme celui-ci,

a.zip(c).forall(t => t._1 == t._2) 

Mettre à jour Comparaison des baies basée sur l'API, commentée par @ASpotySpot,

a.sameElementsAs(c) 
+1

Au lieu de zip alors vous pouvez utiliser .sameElementsAs. par exemple. Tableau (1,3,2) .sameElementsAs (Array (1,3,2)) –

+0

@ASpotySpot Definte! Merci. – elm