Given ciąg, który reprezentuje numer karty kredytowej ...Scala: Jak zamaskować pierwsze znaki n ciąg
val creditCardNo = "1111222233334444"
... w jaki sposób maskować pierwszych 12 znaków z *
?
val maskedCreditCardNo = "************4444"
Given ciąg, który reprezentuje numer karty kredytowej ...Scala: Jak zamaskować pierwsze znaki n ciąg
val creditCardNo = "1111222233334444"
... w jaki sposób maskować pierwszych 12 znaków z *
?
val maskedCreditCardNo = "************4444"
Wymień wszystkie symbole cyfrowe, chyba 4 znaków pozostają:
creditCardNo.replaceAll("\\d(?=\\d{4})", "*")
Wystarczy użyć drop
lub substring
na oryginalnym numerem, a poprzedzić odpowiednią liczbę "*":
"*" * 12 + (creditCardNo drop 12)
Idiomatycznie, 'ns.patch (0," * "* 12, 12)'. –
Podejście, w którym można modyfikować wartości znaków dla każdej pozycji, w tym przypadku przed pozycją 12
,
creditCardNo.zipWithIndex.map (c => if (c._2 < 12) '*' else c._1).mkString
Należy pamiętać, że pomimo możliwości indywidualnej zmiany każdej pozycji, nie jest to najbardziej efektywny sposób manipulowania ciągami.
To wstyd, że som-snytt nie odpowiedział na swój "poprawny" komentarz, ponieważ jest to rozwiązanie o wiele bardziej idiomatyczne niż zwykłe wyrażenie (które nawet nie rozwiązuje problemu podanego w tytule). –