使用String.format格式化SSN

时间:2017-01-29 23:56:45

标签: java string.format

我目前正在使用随机发生器为我生成9位数字。我目前正在尝试在java中使用String.format来打印像XXX-XX-XXXX这样的随机数字,就像社会安全号码一样。我只是不能这样做,我不知道该怎么办。我正在使用模数,似乎我的填充关闭或我完全错了。问题是我必须使用模数。非常感谢任何帮助我指向正确方向的帮助,谢谢。我正在尝试修复ID。

public  String toString (){

        System.out.printf("%d\n",ID);

        return  String.format("First Name: %12s LastName %12s ID: %03d-%02d-%04d ", firstName, lastName,ID%1000,ID%10000, ID%000001000);

    }
}

2 个答案:

答案 0 :(得分:5)

基本上你需要两步而不是一步:

  1. 将数字除以10^X以删除最后X位数。 (N / 10^X
  2. 获取模数10^Y以取最后Y位数。 (N % 10^Y
  3. 修改后的代码

    public static int getDigits(int num, int remove, int take) {
        return (num / (int)Math.pow(10, remove)) % (int)Math.pow(10, take);
    }
    
    public String toString() {
        return  String.format("First Name: %12s LastName %12s ID: %03d-%02d-%04d ",
                              firstName, lastName,
                              getDigits(ID, 6, 3), getDigits(ID, 4, 2), getDigits(ID, 0, 4));
    }
    

    替代解决方案

    将数字转换为字符串并使用String.substring剪切相关部分

    public String toString() {
        String IdStr = String.valueOf(ID);
        return  String.format("First Name: %12s LastName %12s ID: %03d-%02d-%04d ",
                              firstName, lastName,
                              IdStr.substring(0, 3), IdStr.substring(3, 5), IdStr.substring(5, 9));
    }
    

答案 1 :(得分:4)

尝试

return  String.format("First Name: %12s LastName %12s ID: %03d-%02d-%04d ", firstName, lastName,(int)ID/1000000,(int)(ID%1000000)/10000, ID%10000);