2015-03-28 10 views
5

ein String gegeben, dass eine Kreditkartennummer darstellt ...Scala: Wie die ersten N Zeichen eines Strings maskieren

val creditCardNo = "1111222233334444" 

... wie Maske ich die ersten 12 Zeichen mit *?

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

Es ist eine Schande, dass Som-Snytt seinen "Patch" -Kommentar nicht zu einer Antwort gemacht hat, denn das ist eine viel idiomatische Lösung als der reguläre Ausdruck (der das Problem nicht löst, wie im Titel angegeben). –

Antwort

6

alle Symbole Ziffer ersetzen, es sei denn 4 Zeichen bleiben:

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

Gerade drop oder substring auf die ursprüngliche Zahl verwenden und prepend die richtige Anzahl von "*":

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

Idiomatisch, 'ns.patch (0," * "* 12, 12)'. –

1

Ein Ansatz, bei dem Sie die Zeichenwerte für jede Position ändern können, in diesem Fall für die Position 12,

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

Beachten Sie, dass trotz der Möglichkeit, jede Position einzeln zu ändern, dies nicht der effizienteste Weg ist, um Strings zu manipulieren.

Verwandte Themen