1
votes

Remplacement d'éléments dans une chaîne en plus de la première occurrence dans Scala

Je suis relativement nouveau dans Regex et bien que je sache que Scala a une méthode pour utiliser Remplacer les éléments avant la première occurrence, mais je me demandais s'il y avait un moyen de se débarrasser des éléments d'une chaîne après sa première occurrence dans Scala.

Par exemple, si je devais avoir une chaîne comme

"Hello. World"

Comment pourrais-je supprimer tous les W. suivants.

Pour que cela ressemble à quelque chose qui ressemble à

"Hello. W.o.r.l.d"

Merci.


0 commentaires

3 Réponses :


4
votes

Aucune expression régulière sophistiquée requise. Il suffit de split () , puis de vous reconnecter.

val noDots = "Hello. W.o.r.l.d".split("\\.")
val res = noDots.head + "." + noDots.tail.mkString  //res: String = Hello. World

Cela fonctionnera correctement s'il n'y a qu'un seul . dans le texte mais s'il y en a pas de . puis il en insère un à la fin de la chaîne.


0 commentaires

3
votes

Voici une approche utilisant un mélange de correspondance de modèles Regex et de replace:

val s = "Hello. W.o.r.l.d"

val pattern = """(.*?\.)(.*)""".r

s match {
  case pattern(a, b) => a + b.replace(".", "")
  case others => others
}
// res1: String = Hello. World

Notez que si la chaîne n'a pas de . , il sera mis en correspondance avec cas d'autres .


0 commentaires

0
votes

Vous pouvez également essayer avec la combinaison indexOf et sous-chaîne

scala> val x = "Hello. W.o.r.l.d"
x: String = Hello. W.o.r.l.d

scala> x.substring(0,x.indexOf(".")+1) + x.split("\\.").tail.mkString
res21: String = Hello. World

scala>


0 commentaires