Дана строка, которая представляет номер кредитной карты ...Scala: Как маскировать первые N символов строки
val creditCardNo = "1111222233334444"
... как я маскировать первые 12 символов с *
?
val maskedCreditCardNo = "************4444"
Дана строка, которая представляет номер кредитной карты ...Scala: Как маскировать первые N символов строки
val creditCardNo = "1111222233334444"
... как я маскировать первые 12 символов с *
?
val maskedCreditCardNo = "************4444"
Заменить все цифры символы, если 4-х символов остаются:
creditCardNo.replaceAll("\\d(?=\\d{4})", "*")
Просто используйте drop
или substring
на оригинальный номер, и предварять нужное количество "*":
"*" * 12 + (creditCardNo drop 12)
Идиоматически, 'ns.patch (0," * "* 12, 12)'. –
Подход, в котором вы можете изменять значения символов для каждой позиции, в этом случае те, которые были до позиции 12
,
creditCardNo.zipWithIndex.map (c => if (c._2 < 12) '*' else c._1).mkString
Обратите внимание, что, несмотря на возможность изменения каждой позиции по отдельности, это не самый эффективный способ манипулирования строками.
Жаль, что som-snytt не дал ответ на свой «патч», так как это гораздо более идиоматическое решение, чем регулярное выражение (которое даже не решает проблему, как указано в названии). –