После ввода пользователями номера социального страхования я хотел бы взять введенное целое число и отобразить его как номер социального страхования. Таким образом, 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.
вместо этого вы можете попытаться загрузить строку в построитель строк и вставить в правильные индексы "-"
пожалуйста, изучите, прежде чем спрашивать, по крайней мере, изучите javadoc каждого метода, который вы используете.
Как правило, вы не должны использовать целые числа для представления таких вещей, как номер социального страхования.
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");
любой из них работает нормально, но второй пример (споры строк) кажется мне более читабельным.
Я не очень много работаю с String.format, но я думаю, что это потому, что каждый %d ожидает переменную. вы предоставляете только один, поэтому он не будет работать должным образом.