Строка Форматируйте целое число так, чтобы оно выглядело как номер социального страхования

После ввода пользователями номера социального страхования я хотел бы взять введенное целое число и отобразить его как номер социального страхования. Таким образом, XXXXXXXXX становится XXX-XX-XXXX.

 public String getSSNumber()
        {      
            String convert;
            convert = String.valueOf(ssNumber);
            return convert;
        }

 public String toString()
        {
           return (" SSN: " + String.format("%03d-%02d-%04d", ssNumber);
        }

Это код, который я пробовал, и я просто не могу заставить его работать. Простите грубый код, я новичок в java.

Я не очень много работаю с String.format, но я думаю, что это потому, что каждый %d ожидает переменную. вы предоставляете только один, поэтому он не будет работать должным образом.

experiment unit 1998X 03.04.2023 05:43

вместо этого вы можете попытаться загрузить строку в построитель строк и вставить в правильные индексы "-"

experiment unit 1998X 03.04.2023 05:45

пожалуйста, изучите, прежде чем спрашивать, по крайней мере, изучите javadoc каждого метода, который вы используете.

kleopatra 03.04.2023 05:51

Как правило, вы не должны использовать целые числа для представления таких вещей, как номер социального страхования.

Mark Rotteveel 03.04.2023 09:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

String.format это неправильный инструмент для работы. Он не может делать то, что вы хотите. Java видит 3 значения %d и поэтому хочет, чтобы вы передали ему 3 числа.

Вам нужно самостоятельно разбить число на части. Вы можете использовать для этого либо целочисленную обработку, либо строковую обработку.

внутренние споры

.. хотя вы можете использовать long.

Учитывая 123456789, вам необходимо получить:

  • 123
  • 45
  • 6789

Для этого вы можете разделить на соответствующее число: 123456789 / 1000000 есть 123.

Для 45 вам нужно объединить модуль и деление. Во-первых, вы хотите отсечь 123, что требует модуля, а затем отрезать 6789, которое требует деления. 123456789 % 1000000 есть 3456789. Разделите это на 10000, и вы получите 45. В качестве альтернативы, продолжайте «обновлять» число: как только вы получите 123, вычтите это, умноженное на 1000000.

long ssn = 123_45_6789L;
int p1 = ssn / 1_00_0000;
int p2 = (ssn % 1_00_0000) / 1_0000;
int p3 = ssn % 1_0000;
return String.format("%03d-%02d-%04d", p1, p2, p3);

Споры о струнах

(EDIT: заменено гораздо более элегантным подходом @OleV.V.).

Сначала превратите свой номер в строку, затем введите тире:

long ssn = 123456789L;
String a = String.format("%09d", ssn)
  .replaceFirst("(\\d{3})(\\d{2})(\\d{4})", "$1-$2-$3");

любой из них работает нормально, но второй пример (споры строк) кажется мне более читабельным.

Другие вопросы по теме