使用String.format格式化社会安全号码

5
我目前正在使用随机生成器为我生成九位数字。我尝试使用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);

    }
}

使用Java的十进制格式类。 - Mohsen_Fatemi
在您的源代码中,数字不能以0开头。您的数字00001000不是1000,而是512。阅读有关“八进制数”的一些内容,以了解原因。 - Roland Illig
2个回答

5

基本上你需要进行两个步骤:

  1. 将数字除以10^X,以去掉最后的X位数。(N / 10^X
  2. 对数字取模10^Y,以获取最后的Y位数。(N % 10^Y

修改后的代码

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

4

尝试执行

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

成功了。你能解释一下为什么需要用int强制转换吗? - m0d3r
我不确定ID是否为整数,所以为了安全起见,我添加了它。如果它是双精度,则%0xd需要为%0xf。 - Locke
好的,一开始它是一个int,但你刚刚为我的Java编程增加了知识。非常感谢。 - m0d3r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接