2015-03-28 2 views
5

Дана строка, которая представляет номер кредитной карты ...Scala: Как маскировать первые N символов строки

val creditCardNo = "1111222233334444" 

... как я маскировать первые 12 символов с *?

val maskedCreditCardNo = "************4444" 
+2

Жаль, что som-snytt не дал ответ на свой «патч», так как это гораздо более идиоматическое решение, чем регулярное выражение (которое даже не решает проблему, как указано в названии). –

ответ

6

Заменить все цифры символы, если 4-х символов остаются:

creditCardNo.replaceAll("\\d(?=\\d{4})", "*") 
14

Просто используйте drop или substring на оригинальный номер, и предварять нужное количество "*":

"*" * 12 + (creditCardNo drop 12) 
+10

Идиоматически, 'ns.patch (0," * "* 12, 12)'. –

1

Подход, в котором вы можете изменять значения символов для каждой позиции, в этом случае те, которые были до позиции 12,

creditCardNo.zipWithIndex.map (c => if (c._2 < 12) '*' else c._1).mkString 

Обратите внимание, что, несмотря на возможность изменения каждой позиции по отдельности, это не самый эффективный способ манипулирования строками.

Смежные вопросы