masquage d'une carte de crédit nombre en java

J'ai essayé de masquer les caractères d'un numéro de carte de crédit aide de la chaîne de caractère 'X'.J'ai écrit deux fonctions ci-dessous .La deuxième fonction utilise commons.lang.StringUtils classe .J'ai essayé de trouver le temps qu'il faut dans les deux cas

public static String maskCCNumber(String ccnum){
long starttime = System.currentTimeMillis();
int total = ccnum.length();
int startlen=4,endlen = 4;
int masklen = total-(startlen + endlen) ;
StringBuffer maskedbuf = new StringBuffer(ccnum.substring(0,startlen));
for(int i=0;i<masklen;i++) {
maskedbuf.append('X');
}
maskedbuf.append(ccnum.substring(startlen+masklen, total));
String masked = maskedbuf.toString();
long endtime = System.currentTimeMillis();
System.out.println("maskCCNumber:="+masked+" of :"+masked.length()+" size");
System.out.println("using StringBuffer="+ (endtime-starttime)+" millis");
return masked;
}
public static String maskCCNumberCommons(String ccnum){
long starttime = System.currentTimeMillis();
int total = ccnum.length();
int startlen=4,endlen = 4;
int masklen = total-(startlen + endlen) ;
String start = ccnum.substring(0,startlen);
String end = ccnum.substring(startlen+masklen, total);
String padded = StringUtils.rightPad(start, startlen+masklen,'X'); 
String masked = padded.concat(end);
long endtime = System.currentTimeMillis();
System.out.println("maskCCNumber:="+masked+" of :"+masked.length()+" size");
System.out.println("using Stringutils="+(endtime-starttime)+" millis");
return masked;
}
public static void ccNumberMaskingDemo() {
String mcard1="5555555555554444";
maskCCNumber(mcard1);
maskCCNumberCommons(mcard1);
}

Quand j'ai couru ce ,j'ai obtenu ce résultat

maskCCNumber:=5555XXXXXXXX4444 of :16 size
using StringBuffer=0 millis
maskCCNumber:=5555XXXXXXXX4444 of :16 size
using Stringutils=25 millis

Je ne comprends pas pourquoi les communes.StringUtils prend plus de temps que pour la boucle+StringBuffer dans la première fonction.Évidemment, je suis à l'aide de l'api ,dans le mauvais sens..

Quelqu'un peut conseiller sur la façon d'utiliser cette api correctement, dans ce cas?

Faire un tel point de référence est extrêmement complexes (plusieurs pistes, le respect de chauffe, ...). A la StringUtils classe chargé avant ou est-ce la première fois?
Commentaire mineur: utiliser StringBuilder plutôt que de StringBuffer. StringBuffer n'des synchronisations inutiles.
Pouvez-vous essayer d'affaiblir le numéro de carte de crédit c'est la meilleure façon de sécuriser numéro de carte de crédit..
La première méthode a fonctionné parfaitement pour moi.

OriginalL'auteur jimgardener | 2011-09-20