2015-03-28 20 views
5

Data una stringa che rappresenta un numero di carta di credito ...Scala: come mascherare i primi N caratteri di una stringa

val creditCardNo = "1111222233334444" 

... come faccio a mascherare i primi 12 caratteri con *?

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

È un peccato che som-snytt non abbia reso la sua 'patch' una risposta, poiché questa è una soluzione molto più idiomatica rispetto all'espressione regolare (che non risolve nemmeno il problema come indicato nel titolo). –

risposta

6

sostituire tutti i simboli della cifra a meno che rimangono 4 caratteri:

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

Basta usare drop o substring al numero originale, e anteporre il giusto numero di "*":

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

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

1

Un approccio in cui è possibile modificare i valori dei caratteri per ciascuna posizione, in questo caso quelli precedenti alla posizione 12,

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

Si noti che, nonostante la possibilità di modificare singolarmente ciascuna posizione, questo non è il modo più efficiente di manipolare le stringhe.

Problemi correlati