Как использовать складку с помощью регулярного выражения

#regex #scala #foldleft

Вопрос:

Я пытаюсь использовать раскладку, чтобы заменить имена пользователей скрытым значением и распечатать их

 private def removeNamesFromErrorMessage(errorMessage: String): Unit = {

    val userNames = List("mary", "john")
    val errorMessage = "users mary and john have not paid their fee "
    
    val newError = userNames.foldLeft(errorMessage)((message, name) => message.replaceAll(s"${name}:\s?[a-zA-Z0-9-_.] ", s"${name}: <HIDDEN USER>"))
    println(newError)
}
 

Однако он все еще выводит имена пользователей , и я получаю сообщение об message.replaceAll ошибке, в котором говорится:

Якорь » $ » в неожиданном положении

Ответ №1:

Нет необходимости использовать регулярное выражение.

 
  val userNames = List("mary", "john")
  val errorMessage = "users mary and john have not paid their fee"

  val newError = userNames.foldLeft(errorMessage)((message, name) => message.replaceAll(name,"<HIDDEN USER>"))
  println(newError)

 
 users <HIDDEN USER> and <HIDDEN USER> have not paid their fee
 

Ответ №2:

Нет необходимости использовать foldLeft() .

 val userNames    = List("mary", "john")
val errorMessage = "users mary and john have not paid their fee"
val newError = userNames.mkString("|").r
                        .replaceAllIn(errorMessage, "<HIDDEN USER>")