Форматирование SSN с использованием String.format

В настоящее время я использую случайный генератор для генерации чисел 9-значных чисел для меня. В настоящее время я пытаюсь использовать String.format в Java для печати случайных чисел, таких как XXX-XX-XXXX, которые похожи на номера социального страхования. Я просто не могу это сделать, и я не знаю, как это сделать. Я использую по модулю, и кажется, что мой отступ отключен, или я совершенно не прав. Проблема в том, что я должен использовать по модулю. Спасибо за любую помощь, указывающую мне правильное направление. Я пытаюсь исправить идентификатор.

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 ответа

Решение

Попробуй сделать

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

В основном вам нужно два шага вместо одного:

  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 и используйте 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));
}
Другие вопросы по тегам