【问题标题】:Is there a way to format your output so that it comes out more uniformly?有没有办法格式化您的输出,使其输出更均匀?
【发布时间】:2019-11-01 13:54:06
【问题描述】:

我的字符串很长,一切正常,但我无法获得与教授相同的输出。他的输出更均匀。所以首先我尝试做一个 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() 方法。

【问题讨论】:

  • “我不确定我们是否可以使用 printf,因为老师从未教过它。” - 那我们回答也没用。您应该询问您的老师允许您使用哪些方法,然后研究如何使用它们。
  • 也许,您的老师正在使用提供给this question的解决方案之一。
  • 你可以试试here建议的解决方案
  • “有没有其他的格式化方式” - 是的,基本的方法是添加足够的空格,以便一列中的值都具有相同的长度。 (例如,当密码长度小于 20 时,添加一个空格)

标签: java println


【解决方案1】:

您可以使用 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。

您可以使用 - 来控制左对齐和右对齐。例如 %-20s。

此时,我会做实验。

对于浮点数 (1.5),您执行 %f。

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

在本例中,3 是整个宽度,1 是小数点后的位数。所以 %1​​0.2f 会给你 10 个字符宽和小数点后 2 个点。

【讨论】:

  • 非常感谢,成功了。最后我用这个作为我的格式:``` System.out.printf("Password = %-22s Newline = %-5d Single = %-5d Equal = %-5d Lenght = %-5d Upper = %-5d Lower = %-5d Special = %-5d\n", 密码, ctnline, ctlength, ctequal, ctlength2, ctupper, ctlower, ctspec2); ```
【解决方案2】:

您可以使用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$-20s1$ 表示第一个变量,-20s 表示您的字符串固定长度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 2012-12-19
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    相关资源
    最近更新 更多