java - 在java中屏蔽信用卡号

我试图用字符“x”来屏蔽信用卡号码字符串中的字符。我编写了两个函数,如下所示。第二个函数使用commons.lang.StringUtils类。我试图找出这两种情况下所需的时间

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);
}

当我运行这个时,我得到了这个结果
maskCCNumber:=5555XXXXXXXX4444 of :16 size
using StringBuffer=0 millis
maskCCNumber:=5555XXXXXXXX4444 of :16 size
using Stringutils=25 millis

我不明白为什么commons.stringutils要比第一个函数中的for循环+stringbuffer花费更多的时间。
在这种情况下,有人能建议如何正确使用这个api吗?

最佳答案

首先,如果您对这样一个短时间运行的代码进行测量,您通常无法获得准确的结果,因为您的CPU/库/任何东西提供的最小时间分辨率(这意味着您通常会反复看到0毫秒或相同的小值)。
第二,更重要的是,不要优化这一点!”过早的优化是万恶之源”,如果你只有几毫秒的时间,你想要优化的努力就完全白费了。你将不得不掩盖数以百万计的信用卡,你甚至应该远程考虑优化这个简单的面具方法。

本文翻译自 https://stackoverflow.com/questions/7480608/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java masking apache-commons-lang


相关文章:

java - ***多个目标模式。停止

java - 硒:遍历元素列表

java - 如何在Java中自动记录方法的进入/退出?

amazon-web-services - GoDaddy上的AWS DNS验证

java - 哈希码和等于实现

java - 在运行时扩展类

ios - 反转图像掩蔽

python - Keras中具有屏蔽支持的平均池或最大池

java - StringUtils.isNumeric()方法规范在逻辑上是否正确?

java - 如何使用FastDateFormat使用字符串创建Date对象