如何整齐地对齐字符串变量的输出?

时间:2016-02-26 04:37:40

标签: java string output

我正在打印三列字符串。如何组织输出,第一列字符串大小完全随机,并且不会扭曲列之间的距离?

我不知道很多java类方法。我对java以及软件开发都很新。

SOURCE:

//just printing out the data with the string I built "String p"
//don't mind dividing them into three strings



         while (true) {
                        tok = lex.nextToken();

                        String p = TokenType.tokens.get(tok.getKind()) + 
                                   "    left: " + tok.getLeftPosition() +
                                   " right: " + tok.getRightPosition() + "  ";

                          if ( (tok.getKind() == Tokens.Identifier) ||
                              (tok.getKind() == Tokens.INTeger) || 
                               (tok.getKind() == Tokens.FLoat) )
                             p += tok.toString();

                        System.out.println(p + " line:"+lex.source.getLineno() );

                    }

以下是提供一些想法的示例输出。
我至少想要第二列对齐。

输出:

READLINE:   program if == float f
program    left: 0 right: 6   line:1
if    left: 8 right: 9   line:1
==    left: 11 right: 12   line:1
float    left: 14 right: 18   line:1
<id>    left: 20 right: 20  f line:1

1 个答案:

答案 0 :(得分:1)

使用printf()String.format()或基础Formatter

System.out.printf("%-10s left: %-2d right: %-2d  %-3s line: %d%n",
                  TokenType.tokens.get(tok.getKind()),
                  tok.getLeftPosition(),
                  tok.getRightPosition(),
                  (tok.getKind() == Tokens.Identifier ||
                   tok.getKind() == Tokens.INTeger ||
                   tok.getKind() == Tokens.FLoat ? tok.toString() : ""),
                  lex.source.getLineno());

删除-符号右对齐。