Есть ли способ отформатировать вывод, чтобы он выходил более равномерно? - PullRequest
4 голосов
/ 01 ноября 2019

У меня длинная строка, и все правильно, но я не могу получить тот же вывод, что и проф. У него более равномерный выход. Итак, сначала я попытался сделать system.out.println (), но это не сработало.

Это мой код:

System.out.println("Password = " + password + "\t\t" + "Newline = " + ctnline + "\t" + "Single = " + ctlength + "\t" + "Equal = " + ctequal + "\t" + "Lenght = " + ctlength2 + "\t" + "Upper = " + ctupper + "\t" + "Lower = " + ctlower + "\t" + "Special = " + (ctspec2));

Это был вывод:

Password = bank,Rabbither               Newline = 0     Single = 2      Equal = 0       Lenght = 1      Upper = 2       Lower = 0       Special = 1
Password = acrossShemoment,             Newline = 0     Single = 3      Equal = 0       Lenght = 2      Upper = 9       Lower = 0       Special = 0
Password = her.theyOWN          Newline = 0     Single = 6      Equal = 0       Lenght = 3      Upper = 9       Lower = 0       Special = 1
Password = ALICEeyes.said               Newline = 0     Single = 0      Equal = 0       Lenght = 0      Upper = 0       Lower = 0       Special = 0
Password = thepackKing.         Newline = 0     Single = 1      Equal = 0       Lenght = 3      Upper = 4       Lower = 0       Special = 1
Password = thethatKing.         Newline = 0     Single = 1      Equal = 0       Lenght = 0      Upper = 2       Lower = 0       Special = 0
Password = AfterWhichdear!              Newline = 0     Single = 1      Equal = 0       Lenght = 1      Upper = 3       Lower = 0       Special = 0
Password = "Silencethecrown             Newline = 0     Single = 1      Equal = 1       Lenght = 6      Upper = 8       Lower = 0       Special = 0
Password = "Silencemuchme               Newline = 0     Single = 6      Equal = 0       Lenght = 1      Upper = 6       Lower = 0       Special = 2
Password = King.nopeeped                Newline = 0     Single = 5      Equal = 0       Lenght = 2      Upper = 9       Lower = 0       Special = 2
Password = eitherKing.Soon              Newline = 0     Single = 0      Equal = 0       Lenght = 0      Upper = 0       Lower = 0       Special = 0 

Это не сработало, учитель имеет вывод, где "новая строка"выровнены вместе.

Мне нужно, чтобы вывод был таким (как это имеет учитель):

Password = bank,Rabbither       Newline = 0     Single = 2      Equal = 0       Lenght = 1      Upper = 2       Lower = 0       Special = 1
Password = acrossShemoment,     Newline = 0     Single = 3      Equal = 0       Lenght = 2      Upper = 9       Lower = 0       Special = 0
Password = her.theyOWN          Newline = 0     Single = 6      Equal = 0       Lenght = 3      Upper = 9       Lower = 0       Special = 1
Password = ALICEeyes.said       Newline = 0     Single = 0      Equal = 0       Lenght = 0      Upper = 0       Lower = 0       Special = 0
Password = thepackKing.         Newline = 0     Single = 1      Equal = 0       Lenght = 3      Upper = 4       Lower = 0       Special = 1
Password = thethatKing.         Newline = 0     Single = 1      Equal = 0       Lenght = 0      Upper = 2       Lower = 0       Special = 0
Password = AfterWhichdear!      Newline = 0     Single = 1      Equal = 0       Lenght = 1      Upper = 3       Lower = 0       Special = 0
Password = "Silencethecrown     Newline = 0     Single = 1      Equal = 1       Lenght = 6      Upper = 8       Lower = 0       Special = 0
Password = "Silencemuchme       Newline = 0     Single = 6      Equal = 0       Lenght = 1      Upper = 6       Lower = 0       Special = 2
Password = King.nopeeped        Newline = 0     Single = 5      Equal = 0       Lenght = 2      Upper = 9       Lower = 0       Special = 2
Password = eitherKing.Soon      Newline = 0     Single = 0      Equal = 0       Lenght = 0      Upper = 0       Lower = 0       Special = 0 

Я никогда не учился использовать printf, вот как они показывали его онлайн, когда яискал решение. Есть ли другой способ правильно отформатировать при печати. Я не уверен, можем ли мы использовать printf или нет, так как учитель никогда не учил этому.

Редактировать: мне разрешено использовать метод String.format ().

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Вы можете использовать System.out.printf (). Он работает с теми же кодами, что и String.format ().

System.out.printf("Password = %20s Newline = %2d Single = %d Equal = %d Lenght = %d Upper = %d Lower = %d Special = %d\n",
    password, ctnline, ctlength, ctequal, ctlength2, ctupper, ctlower, ctspec2);

Строки форматирования принимают любой текст, который вам нравится, плюс коды, начинающиеся с% s. Чаще всего вы будете использовать две% s - строку - и% d - десятичное число. Вы можете поискать строки в формате printf для более подробного обсуждения. Менее часто, но все же важно,% f. Я расскажу об этом ниже.

% s или% d могут иметь необязательную длину. Вы увидите, что я сделал% 20s - это означает заполнение пробела до 20 символов, даже если переданная строка пуста. Вы можете сделать то же самое с числами. Если вы не укажете длину, она будет использовать ровно столько, сколько необходимо. Если вы не укажете достаточно, он будет работать долго.

Вы можете заполнить нулями числа, такие как% 03d. Это даст вам, например, 004 вместо 4.

Вы можете манипулировать выравниванием по левому краю и выравниванием по правому краю с помощью -. % -20, например.

На этом этапе я бы поэкспериментировал.

Для чисел с плавающей запятой (1.5) вы делаете% f.

System.out.printf("%3.1f\n", 1.5);

В этом примере 3 - это полная ширина, а 1 - это места после десятичной дроби. Так что% 10.2f даст вам 10 символов в ширину и 2 очка после десятичной дроби.

1 голос
/ 01 ноября 2019

Вы можете использовать String.format для унификации ваших выходов. С String.format вы можете определить длину вывода вашего текста как формат.

В качестве примера;

String firstValue = "Password = bank,Rabbither";
String secondValue = "Newline = 0";
String thirdValue = "Single = 2";
String str = String.format("%1$-20s | %2$-30s | %3$-30s",fristValue, secondValue, thirdValue);

Для 1$-20s: 1$ означает первую переменную, -20s означает фиксированную длину строки.

...