【问题标题】:Printf output for arrayList to table with proper indentarrayList 的 Printf 输出到具有适当缩进的表
【发布时间】:2018-11-24 16:55:05
【问题描述】:

我的作业基本上完成了,但输出中需要一些格式,我只是不明白如何使用printf 来解决问题。我以前从未使用过它。

我有用户输入的 ID 和密码,它们保存在一个数组列表中。

输出应如下所示:

    Nr. Name                               Password (ROT13)
-----------------------------------------------------------
 1. Sally Hu                               nopNOP
 2. Bernd das Brot                         zrvaCnffjbeg
 3. John Doe                               klmTRURVZ
-----------------------------------------------------------

但对我来说是这样的:

 Nr. Name                                 Password (ROT13)
-----------------------------------------------------------
 1. Sally Hu                               nopNOP
 2. Bernd das Brot                             zrvaCnffjbeg
 3. John Doe                               klmTRURVZ
-----------------------------------------------------------

当前打印代码:

  System.out.println("Nr. Name                       Passwort (ROT13)");


    System.out.println("-----------------------------------------------------------");
                    for(int i = 0; i < userList.size();i++)
                    {
                        System.out.println((userList.indexOf(userList.get(i))+1) +". " + userList.get(i).getmId() + "       " + rot13(userList.get(i).getmPw()));    
                    }

如果有人可以快速帮助我,甚至可以解释一些用于解决此格式问题的 printf 函数? (所以我以后可以使用printf 正确格式化,而不是在我的打印行中使用 +" "+ 的这种hacky伪格式化会导致像这里这样的问题)

【问题讨论】:

    标签: java arraylist format printf tabular


    【解决方案1】:

    我只是不明白如何使用 printf

    这是方法的签名,from the docs

    public PrintStream printf(String format, Object... args)
    

    让我们抛开返回值,专注于参数

    format 是指定要使用的格式的字符串,args 是要使用该格式打印的变量列表。

    举个例子吧。

    假设您想以这种特定格式打印一个字符串 -> "5 + 6 = 11"。 但这是此格式化字符串的一个特定实例,对于这些特定数字,您希望输入任意数字,结果将是一个显示这些数字相加的字符串。

    字符串格式是这样的:一个数字,一个空格'',加号'+',一个数字,一个空格,等号'=',一个空格,最后还有一个数字。为了让printf() 理解这一点,您需要在第一个参数中将其作为字符串提供。

    这是那个字符串String format = "%d + %d = %d"

    printf() 会从上面的字符串中知道你想要的格式,它会用一个整数变量替换每个 '%d' (%f 表示浮点数,%s 表示字符串等)。这些是您在 printf() 之后补充的整数。

    最后,在我们的具体示例中,“5 + 6 = 11”

    int number1 = 5, number2 = 6;
    String format = "%d + %d = %d";
    //print the result formatted
    System.out.printf(format,number1, number2, number1+number2);
    

    您可以更改 number1 和 number2 的值,结果总是以String format 指定的格式相加。

    【讨论】:

      【解决方案2】:

      您可以在 System.out.println 中用“\t”标识:

      System.out.println("test\ttest2");
      

      【讨论】:

        【解决方案3】:

        试试这个

         System.out.format("%d. %-15s %s%n", userList.indexOf(userList.get(i))+1, userList.get(i).getmId(), rot13(userList.get(i).getmPw()));    
        

        【讨论】:

        • 效果很好。但是我不太确定我是否理解正确。您能否向我解释一下,以便我可以用它来缩进上面的行,以同样的方式说 Mr. Name 和 Password(Rot13)?我试过 System.out.printf("%-20s", "Nr. Name Passwort (ROT13)");它有效,但这更多的是猜测而不是真正理解
        • 你可以阅读formt方法here和格式字符串解释here。我使用的格式字符串将“Nr. Name”列的宽度设置为 15 个字符并进行右填充(-标志),因此下一列中的值将对齐。如果你想对标题做同样的事情,你需要两个格式说明符作为格式,并相应调整宽度。
        猜你喜欢
        • 1970-01-01
        • 2015-01-13
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多